思路
递归判断条件:
- 如果左子树和右子树的高相等,说明当前root的这棵树就是答案
- 如果左子树比右子树高,那么说明root和右子树的所有结点都不是答案,遍历左子树继续找
- 如果右子树比左子树高,那么说明root和左子树的所有结点都不是答案,遍历右子树继续找
代码
class Solution {
public:
TreeNode* subtreeWithAllDeepest(TreeNode* root) {
if(!root)
return NULL;
int left_height = getHeight(root->left);
int right_height = getHeight(root->right);
if(left_height == right_height)
return root;
if(left_height > right_height)
return subtreeWithAllDeepest(root->left);
return subtreeWithAllDeepest(root->right);
}
// 通过DFS得到树的高
int getHeight(TreeNode* root){
if(!root){
return 0;
}
int left = getHeight(root->left);
int right = getHeight(root->right);
return max(left, right)+1;
}
};