程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java完成求二叉樹的深度和寬度

Java完成求二叉樹的深度和寬度

編輯:關於JAVA

Java完成求二叉樹的深度和寬度。本站提示廣大學習愛好者:(Java完成求二叉樹的深度和寬度)文章只能為提供參考,不一定能成為您想要的結果。以下是Java完成求二叉樹的深度和寬度正文


這個是罕見的對二叉樹的操作。總結一下:

設節點的數據構造,以下:

class TreeNode {
    char val;
    TreeNode left = null;
    TreeNode right = null;

    TreeNode(char _val) {
        this.val = _val;
    }
}

1.二叉樹深度

  這個可使用遞歸,分離求出左子樹的深度、右子樹的深度,兩個深度的較年夜值+1便可。

// 獲得最年夜深度
    public static int getMaxDepth(TreeNode root) {
        if (root == null)
            return 0;
        else {
            int left = getMaxDepth(root.left);
            int right = getMaxDepth(root.right);
            return 1 + Math.max(left, right);
        }
    }

2.二叉樹寬度

  應用隊列,條理遍歷二叉樹。在上一層遍歷完成後,下一層的一切節點曾經放到隊列中,此時隊列中的元素個數就是下一層的寬度。以此類推,順次遍歷下一層便可求出二叉樹的最年夜寬度。

// 獲得最年夜寬度
    public static int getMaxWidth(TreeNode root) {
        if (root == null)
            return 0;

        Queue<TreeNode> queue = new ArrayDeque<TreeNode>();
        int maxWitdth = 1; // 最年夜寬度
        queue.add(root); // 入隊

        while (true) {
            int len = queue.size(); // 以後層的節點個數
            if (len == 0)
                break;
            while (len > 0) {// 假如以後層,還有節點
                TreeNode t = queue.poll();
                len--;
                if (t.left != null)
                    queue.add(t.left); // 下一層節點入隊
                if (t.right != null)
                    queue.add(t.right);// 下一層節點入隊
            }
            maxWitdth = Math.max(maxWitdth, queue.size());
        }
        return maxWitdth;
    }

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved