旋转二叉树
题目
给你一棵二叉树的根节点 root
,翻转这棵二叉树,并返回其根节点。
示例 1:
输入:root = [4,2,7,1,3,6,9] 输出:[4,7,2,9,6,3,1]
示例 2:
输入:root = [2,1,3] 输出:[2,3,1]
示例 3:
输入:root = [] 输出:[]
题解:
我们需要保存左右子树的值进行交换即可解决该问题
struct TreeNode* invertTree(struct TreeNode* root) {
if (root == NULL) {
return NULL;
}
//取出左右子树的val;
struct TreeNode* left = invertTree(root->left);
struct TreeNode* right = invertTree(root->right);
//同时取出不影响改变值后,值得覆盖消失
root->left = right;
root->right = left;
return root;
}
平衡二叉树
题目
给定一个二叉树,判断它是否是
平衡二叉树
示例 1:
输入:root = [3,9,20,null,null,15,7] 输出:true
示例 2:
输入:root = [1,2,2,3,3,null,null,4,4] 输出:false
示例 3:
输入:root = [] 输出:truet
题解:
平衡二叉树 是指该树所有节点的左右子树的深度相差不超过 1。
这与我们探索二叉树的高度相似
为NULL则返回0,不为NULL,则最大的左(右)子树加1,在进行比较<=1
int height(struct TreeNode* root) {
if (root == NULL) {
return 0;
} else {
return fmax(height(root->left), height(root->right)) + 1;
}
}
bool isBalanced(struct TreeNode* root) {
if (root == NULL) {
return true;
} else {
return fabs(height(root->left) - height(root->right)) <= 1 && isBalanced(root->left) && isBalanced(root->right);
}
}