对称二叉树
[题目](101. 对称二叉树)
重点
需要确定遍历顺序
代码实现
/**
* 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 compare(TreeNode* left, TreeNode* right) {
// 首先排除空节点
if (left == NULL && right != NULL) {
return false;
}
else if (left != NULL && right == NULL) {
return false;
}
else if (left == NULL && right == NULL) {
return true;
}
// 排除数值不相同的情况
else if (left->val != right->val) {
return false;
}
// 左右节点都不为空,且数值相同的情况
// 才做递归,做下一层的判断
// 后序遍历
bool outside = compare(left->left, right->right); // 左
bool inside = compare(left->right, right->left); // 右
bool isSame - outside && inside; // 中
return isSame;
}
bool isSymmetric(TreeNode* root) {
if (root == NULL) {
return true;
}
return compare(root->left, root->right);
}
};
二叉树的最大深度
[题目](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 result;
void getdepth(TreeNode* node, int depth) {
result = depth > result ? depth : result; // 中
if (node->left == NULL && node->right == NULL) {
return;
}
// 左
if (node->left) {
getdepth(node->left, depth + 1);
}
// 右
if (node->right) {
getdepth(node->right, depth + 1);
}
}
int maxDepth(TreeNode* root) {
result = 0;
if (root == NULL) {
return result;
}
getdepth(root, 1);
return result;
}
};