1. 程式人生 > >求二叉樹的深度

求二叉樹的深度

Question:

       輸入一棵二叉樹,求該樹的深度。從根結點到葉結點依次經過的結點(含根、葉結點)形成樹的一條路徑,最長路徑的長度為樹的深度。

解:採用遞迴的思想

  1. 如果根節點為空,則深度為0,返回0,遞迴的出口
  2. 如果根節點不為空,那麼深度至少為1,然後我們求他們左右子樹的深度,
  3. 比較左右子樹深度值,返回較大的那一個
  4. 通過遞迴呼叫

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)的二叉樹至多有2^k-1個結點

其中,二叉樹的高度定義為二叉樹中層數最大的葉結點的層數加1,深度定義為二叉樹中層數最大的葉結點的層數

性質6:有n個結點(n > 0)的完全二叉樹的高度為h = ceil(log2(n+1)),深度為h - 1