解题:遍历一棵二叉树,从根部看起,查看它是否有左右结点。有五种情况
1.没有根节点,那结果就是0
2.有根节点,没有左右子树,结果为1
3.没有左子树,有右子树。把右子树看成一棵新的树,用子问题求解。
4.没有右子树,有左子树。把左子树看成一棵新的树,用子问题求解
5.既有左子树,又有右子树。那就把左右子树分别都看成新的树,最后比较谁的最近叶子的路径短,就取哪边。
因为都把左右子树看成新的树了,所以每一棵树都可以用2-3-4-5来判断找出最近叶子的最短路径。
每一棵树都调用这个判断的方法,所以就是递归
以下为代码:
lass Solution {
public:
int run(TreeNode *root) {
if(root==NULL)
return 0;
if((root->left==NULL)&&(root->right==NULL))
return 1;
if(root->left==NULL)
return run(root->right)+1;
if(root->right==NULL)
return run(root->left)+1;
return min(run(root->right)+1,run(root->left)+1);
}
};