给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到叶子节点的最远距离。
给出一棵如下的二叉树:
1
/ \
2 3
/ \
4 5
这个二叉树的最大深度为3
.
递归算法:
理解:从另一个角度理解树的深度,如果一颗树只有一个节点,那么他的深度为1,如果根结点只有 左子树而没有右子树,那么树的深度应该是其左子树的深度加1,同样如果根结点只有 右子树而没有左子树,那么树的深度应该是其右子树的深度加1。如果既有左子树,又有右子树,那么该树的深度就是左、右子树深度的最大值再加1.
class Solution {
public:
/**
* @param root: The root of binary tree.
* @return: An integer
*/
int maxDepth(TreeNode * root) {
// write your code here
if(root==NULL) return 0;
int ld=maxDepth(root->left);
int rd=maxDepth(root->right);
int depth=max(ld,rd);
return depth+1;
}
};
最小深度:根结点到叶子结点的最近距离
最小深度和最大深度的求法有一点不同
要考虑到2 #2 3z这样的情况,若直接copy最大深度的求法,将得到值1,其实其最小深度为3.因此需要判断其每个结点左子树和右子树是否存在的情况,若左子树不存在,则返回右子树的最小深度加一。若右子树不存在,则返回左子树的最小深度加一。
代码如下:
class Solution {
public:
/**
* @param root: The root of binary tree
* @return: An integer
*/
int minDepth(TreeNode * root) {
// write your code here
if(root==NULL) return 0;
if(root->left==NULL) return minDepth(root->right)+1;
if(root->right==NULL) return minDepth(root->left)+1;
int ld=minDepth(root->left);
int rd=minDepth(root->right);
int depth=min(ld,rd);
return depth+1;
}
};