求二叉樹的深度和寬度[Java]


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

設節點的數據結構,如下:

1 class TreeNode {
2     char val;
3     TreeNode left = null;
4     TreeNode right = null;
5 
6     TreeNode(char _val) {
7         this.val = _val;
8     }
9 }

 1.二叉樹深度

  這個可以使用遞歸,分別求出左子樹的深度、右子樹的深度,兩個深度的較大值+1即可。

 1     // 獲取最大深度
 2     public static int getMaxDepth(TreeNode root) {
 3         if (root == null)
 4             return 0;
 5         else {
 6             int left = getMaxDepth(root.left);
 7             int right = getMaxDepth(root.right);
 8             return 1 + Math.max(left, right);
 9         }
10     }

2.二叉樹寬度

  使用隊列,層次遍歷二叉樹。在上一層遍歷完成后,下一層的所有節點已經放到隊列中,此時隊列中的元素個數就是下一層的寬度。以此類推,依次遍歷下一層即可求出二叉樹的最大寬度。

 1 // 獲取最大寬度
 2     public static int getMaxWidth(TreeNode root) {
 3         if (root == null)
 4             return 0;
 5 
 6         Queue<TreeNode> queue = new ArrayDeque<TreeNode>();
 7         int maxWitdth = 1; // 最大寬度
 8         queue.add(root); // 入隊
 9 
10         while (true) {
11             int len = queue.size(); // 當前層的節點個數
12             if (len == 0)
13                 break;
14             while (len > 0) {// 如果當前層,還有節點
15                 TreeNode t = queue.poll();
16                 len--;
17                 if (t.left != null)
18                     queue.add(t.left); // 下一層節點入隊
19                 if (t.right != null)
20                     queue.add(t.right);// 下一層節點入隊
21             }
22             maxWitdth = Math.max(maxWitdth, queue.size());
23         }
24         return maxWitdth;
25     }

 

參考:http://blog.csdn.net/htyurencaotang/article/details/12406223


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM