(二)3道簡單算法:二叉樹最大節點、十進制轉任意進制、位運算實現加法

    //【1】.**************************************************************************

/**
      問題描述:前中後序,遞歸,查找二叉樹最大節點
     */
/** 二叉樹的最大節點 在二叉樹中尋找值最大的節點並返回。 */ public class TreeNode { public int value; public TreeNode leftTreeNode; public TreeNode rightTreeNode; public TreeNode(int value, TreeNode leftTreeNode, TreeNode rightTreeNode) { this.value = value; this.leftTreeNode = leftTreeNode; this.rightTreeNode = rightTreeNode; } } private static TreeNode maxTreeNode; /** * 考點:二叉樹-深度遍歷-遞歸-前序遍歷 * @param root * @return */ public TreeNode maxNodePre(TreeNode root) { if (root == null) { return null; } maxTreeNode = root; nextTreeNodePre(root); return maxTreeNode; } private void nextTreeNodePre(TreeNode treeNode) { System.out.println(treeNode.value); if (treeNode.value > maxTreeNode.value) { maxTreeNode = treeNode; } if (treeNode.leftTreeNode != null) { nextTreeNodePre(treeNode.leftTreeNode); } if (treeNode.rightTreeNode != null) { nextTreeNodePre(treeNode.rightTreeNode); } } /** * 考點:二叉樹-深度遍歷-遞歸-中序遍歷 * @param root * @return */ public TreeNode maxNodeMid(TreeNode root) { if (root == null) { return null; } maxTreeNode = root; nextTreeNodeMid(root); return maxTreeNode; } private void nextTreeNodeMid(TreeNode treeNode) { if (treeNode.leftTreeNode != null) { nextTreeNodeMid(treeNode.leftTreeNode); } System.out.println(treeNode.value); if (treeNode.value > maxTreeNode.value) { maxTreeNode = treeNode; } if (treeNode.rightTreeNode != null) { nextTreeNodeMid(treeNode.rightTreeNode); } } /** * 考點:二叉樹-深度遍歷-遞歸-後序遍歷 * @param root * @return */ public TreeNode maxNodeAfter(TreeNode root) { if (root == null) { return null; } maxTreeNode = root; nextTreeNodeAfter(root); return maxTreeNode; } private void nextTreeNodeAfter(TreeNode treeNode) { if (treeNode.leftTreeNode != null) { nextTreeNodeAfter(treeNode.leftTreeNode); } if (treeNode.rightTreeNode != null) { nextTreeNodeAfter(treeNode.rightTreeNode); } System.out.println(treeNode.value); if (treeNode.value > maxTreeNode.value) { maxTreeNode = treeNode; } }
   //【2】*************************************************************************************
    /**
     * 問題描述:進制轉換
      給定一個十進制數 n 和 一個整數 k, 將 十進制數 n 轉換成 k進制數.
      【方法】:遞歸整除和餘數
     * @param n
     * @param k
     * @return
     */
    public String hexConversion(int n, int k) {
        StringBuffer resultNumber = new StringBuffer();
        tenToK(resultNumber, n, k);
        System.out.println("n:k:result: " + n +" "+ k + " " + resultNumber.toString());

        return resultNumber.toString();
    }

    private void tenToK(StringBuffer stringBuffer, int n, int k) {
        int integral = n/k;
        int mode = n % k;
        stringBuffer.insert(0, mode);
        if (integral >= k) {
            tenToK(stringBuffer, integral, k);
        } else if (integral > 0) {
            stringBuffer.insert(0, integral);
        }
    }

    private void testHexConversion() {
        hexConversion(3, 4);
        hexConversion(9, 4);
        hexConversion(29, 4);
        hexConversion(3, 5);
        hexConversion(9, 5);
        hexConversion(29, 5);
    }
   //【3】**************************************************************
/**
    位運算實現加法
    */
public int aplusb(int a, int b) { int sum_without_carry, carry; sum_without_carry = a^b; //沒有進位的和 carry = (a&b)<<1; //進位 if(carry==0) return sum_without_carry; else return aplusb(sum_without_carry, carry); } public void testAplusB() { int result = aplusb(4,19); System.out.println(result); }
相關文章
相關標籤/搜索