LeetCode面试题Day19|LC104 二叉树的最大深度
题目1:
指路:. - 力扣(LeetCode)104 二叉树的最大深度
思路与分析:
求最大深度这里我们分别找到左子树和右子树的最大深度,当左右节点为空时停止递归,最后返回左右子树的较大深度,不要忘记最后加上根节点。
代码:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
int maxDepth(TreeNode* root) {
int ans = 0;
if (root == NULL) return 0;
int leftdepth = maxDepth(root->left);
int rightdepth = maxDepth(root->right);
ans = max(leftdepth, rightdepth) + 1;
return ans;
}
};
题目2:
指路:. - 力扣(LeetCode)100 相同的树
思路与分析:
相同的树要求为两点:结构相同,节点值相同。而结构相同有两种情况,都为空或者是不为空的情况下结构相同,节点值相同则要求每个节点对于的值都相同。条件不满足则返回false,否则返回true。
代码:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
bool isSameTree(TreeNode* p, TreeNode* q) {
if (p == nullptr && q == nullptr) {
return true;
} else if (p == nullptr || q == nullptr) {
return false;
} else if (p->val != q->val) {
return false;
} else {
return isSameTree(p->left, q->left) && isSameTree(p->right, q->right);
}
}
};
还有一种结合性较强的代码,给大家注释了一下,了解即可。
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
bool isSameTree(TreeNode* p, TreeNode* q) {
return !p || !q ? p == q : isSameTree(p->left, q->left)
&& isSameTree(p->right, q->right)
&& p->val == q->val;
// 判断当p或q二者有一个为空时,判断二者是否相同,相同则说明二者都为空,返回true,
// 否则,将返回p的left和q的left,这里需要同时满足三个条件:
// 1.p的左子树==q的左子树
// 2.p的右子树==q的右子树
// 3.p和q对应的节点值相等
// 满足以上三个条件才能返回第二种true,否则为false
}
};