求二叉樹的深度
阿新 • • 發佈:2018-12-12
Question:
輸入一棵二叉樹,求該樹的深度。從根結點到葉結點依次經過的結點(含根、葉結點)形成樹的一條路徑,最長路徑的長度為樹的深度。
解:採用遞迴的思想
- 如果根節點為空,則深度為0,返回0,遞迴的出口
- 如果根節點不為空,那麼深度至少為1,然後我們求他們左右子樹的深度,
- 比較左右子樹深度值,返回較大的那一個
- 通過遞迴呼叫
Java(javac 1.8):
/** public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } */ public class Solution { public int TreeDepth(TreeNode root) { if(root == null) return 0; int leftDepth = TreeDepth(root.left); int rightDepth = TreeDepth(root.right); return 1 + (leftDepth > rightDepth ? leftDepth : rightDepth); } }
C++11(clang++ 3.9)
/* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { } };*/ class Solution { public: int TreeDepth(TreeNode* pRoot) { if(!pRoot) return 0 ; return max(1+TreeDepth(pRoot->left), 1+TreeDepth(pRoot->right)); } };
這裡還要注意樹的深度和高度問題,《資料結構與演算法》高等教育出版社,4.2 二叉樹的主要性質中有如下內容:
性質5:高度(height)為k(深度(depth)為k-1)的二叉樹至多有個結點
其中,二叉樹的高度定義為二叉樹中層數最大的葉結點的層數加1,深度定義為二叉樹中層數最大的葉結點的層數
性質6:有n個結點(n > 0)的完全二叉樹的高度為h = ceil(log2(n+1)),深度為h - 1