题目要求从根节点开始查找,一直到叶子节点,找出最短的层数,采用递归法,不断切割划分原问题
class Solution {
public:
int run(TreeNode *root) {
TreeNode *leftTree=root->left;
TreeNode *rightTree=root->right;
if(root==NULL)
return 0;
if(leftTree==NULL&&rightTree==NULL)//左右子树都已经空了,说明已经遍历到叶子节点
return 1;
if(!leftTree){//如果左子树已经到头了,遍历右子树
return 1+run(rightTree);
}
if(!rightTree){//如果右子树已经到头了,遍历左子树
return 1+run(leftTree);
}
return min(run(leftTree),run(rightTree))+1;//找出左右子树中最短的那个,再加上根节点的1
}
};