判断是否为平衡二叉树
定义
oj题目
采用递归的思想
在gaodu函数中算出左子树的高度和右子树的高度
相减进行比较
再用递归遍历左右子树
依次算出每个结点的左右子树高度比较,只要有一个不符合条件则不为平衡二叉树
代码展示
int gaodu(struct TreeNode* a)
{
if(a==NULL)
{
return 0;
}
int la=gaodu(a->left);
int ra=gaodu(a->right);
return la>ra?1+la:1+ra;
}
bool isBalanced(struct TreeNode* root) {
int n=0;
if(root==NULL)
{
return true;
}
int l=gaodu(root->left);
int r=gaodu(root->right);
int a=l-r;
if(!((a==-1)||(a==0)||(a==1)))
{
return false;
}
if(!isBalanced(root->left))
{
return false;
}
if(!isBalanced(root->right))
{
return false;
}
return true;
}
N0 N1 N2关系
必有N0=N2+1
翻转二叉树
oj题目
递归遍历二叉树翻转左右子树即可
代码展示
void jiaohuan (struct TreeNode* a)
{
struct TreeNode* x;
x=a->left;
a->left=a->right;
a->right=x;
}
struct TreeNode* invertTree(struct TreeNode* root) {
if(root==NULL)
{
return 0;
}
jiaohuan(root);
invertTree(root->left);
invertTree(root->right);
return root;
}
另一颗树的子树
oj题目
same函数递归的方法判断两数是否相同
在issub函数中递归root二叉树调用same即可
代码展示
bool isSameTree(struct TreeNode* p, struct TreeNode* q) {
if(p==NULL&&q==NULL)
{
return true;
}
if((p==NULL)||(q==NULL))
{
return false;
}
if(p->val==q->val)
{
}
else
{
return false;
}
if(isSameTree(p->left,q->left)&&isSameTree(p->right,q->right))
{
return true;
}
else{
return false;
}
}
bool isSubtree(struct TreeNode* root, struct TreeNode* subRoot){
if(root==NULL)
{
return false;
}
if(isSameTree(root,subRoot))
{
return true;
}
else{
if(isSubtree(root->left,subRoot)
||isSubtree(root->right,subRoot))
{
return true;
}
return false;
}
}