[二叉树][easy] 平衡二叉树和合并二叉树
Posted 明月清辉入梦来
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[二叉树][easy] 平衡二叉树和合并二叉树相关的知识,希望对你有一定的参考价值。
平衡二叉树:这道题在leetcode上是easy难度,但是我觉得它比一般的medium难度的题还难点。该题只发递归,因为迭代版有点麻烦,没写出来。
给定一个二叉树,判断它是否是高度平衡的二叉树。
本题中,一棵高度平衡二叉树定义为:
一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。
示例 1:
给定二叉树 [3,9,20,null,null,15,7]
3
/ \
9 20
/ \
15 7
返回 true 。
示例 2:
给定二叉树 [1,2,2,3,3,null,null,4,4]
1
/ \
2 2
/ \
3 3
/ \
4 4
返回 false 。
class Solution {
public:
/**Recursive Methods*/
bool isBalanced(TreeNode* root) {
return depth(root)!=-1;
}
int depth(TreeNode* root){
if(nullptr==root)return 0;
int left=depth(root->left);
if(left==-1) return -1;
int right=depth(root->right);
if(right==-1) return -1;
return abs(left-right)>1? -1:max(left,right)+1;
}
/* Iteration Methods*/
};
合并二叉树:该题迭代版还是不错的
给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。
你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。
示例 1:
输入:
Tree 1 Tree 2
1 2
/ \ / \
3 2 1 3
/ \ \
5 4 7
输出:
合并后的树:
3
/ \
4 5
/ \ \
5 4 7
注意: 合并必须从两个树的根节点开始。
class Solution {
public:
/*recursive methods
TreeNode* mergeTrees(TreeNode* t1, TreeNode* t2) {
TreeNode* p=new TreeNode(0);
if(nullptr==t1 && nullptr==t2) return nullptr;
if(nullptr==t1) {
p=t2;
return p;
}
if(nullptr==t2){
p=t1;
return p;
}
p->val=t1->val+t2->val;
p->left=mergeTrees(t1->left,t2->left);
p->right=mergeTrees(t1->right,t2->right);
return p;
}
*/
/*iteration methods*/
TreeNode* mergeTrees(TreeNode* t1, TreeNode* t2){
if(nullptr==t1) return t2;
if(nullptr==t2) return t1;
std::stack<std::pair<TreeNode*,TreeNode*>> node_stack;
node_stack.push(std::make_pair(t1,t2));
while(!node_stack.empty()){
auto p1=node_stack.top().first;
auto p2=node_stack.top().second;
node_stack.pop();
if(nullptr==p2){continue;}
p1->val+=p2->val;
if(nullptr==p1->left) {p1->left=p2->left;}
else{
node_stack.push(std::make_pair(p1->left,p2->left));
}
if(nullptr==p1->right) {p1->right=p2->right;}
else{
node_stack.push(std::make_pair(p1->right,p2->right));
}
}
return t1;
}
};
以上是关于[二叉树][easy] 平衡二叉树和合并二叉树的主要内容,如果未能解决你的问题,请参考以下文章
你真的懂树吗?二叉树AVL平衡二叉树伸展树B-树和B+树原理和实现代码详解...
你真的懂树吗?二叉树AVL平衡二叉树伸展树B-树和B+树原理和实现代码详解...