根据遍历序列确定二叉树:如果已知二叉树的先序序列与中序序列或者中序序列与后序序列均能唯一的确定一个二叉树,但是如果已知二叉树的线序序列与后续序列则不能推出唯一的二叉树
按照先序遍历的顺序建立二叉链表
void createBiTree(BiTree *T)
{
cin>>ch;
if(ch==#)T=NULL;
else
{
T=new BiTNode
T->data=ch;
createBiTree(T->left);
createBiTree(T->right)
}
}
复制一个一模一样的二叉树:
void Copy(BiTree T,BiTree * NewT)
{
if(T==NULL) NewT=NULL;
else
{
NewT=new BiTNode;
NewT->val=T->val;
Copy(T->left,NewT->left);
Copy(T->right,NewT->right);
}
}
判断两个二叉树是否一样:
int NodeCount(BiTree T)
{
if(T==NULL) return 0;
return NodeCount(T->left)+NodeCount(T->right)+1;
}
判断一个二叉树是否对称:
bool isSameTree(struct TreeNode* p, struct TreeNode* q){
if(p==NULL&&q==NULL) return true;
else if(p==NULL||q==NULL) return false;
else if(p->val!=q->val) return false;
else return isSameTree(p->left,q->right)&&isSameTree(p->right,q->left);
}
bool isSymmetric(struct TreeNode* root){
return isSameTree(root->left,root->right);
}
与判断两个二叉树是否相同大同小异
二叉树的最大深度:
int Depth(BiTree T)
{
if(T==NULL) return 0;
else
{
n=Depth(T->left);
m=Depth(t->right);
return n>m?n+1:m+1;
}
}
二叉树中结点的个数:
int NodeCount(BiTree T)
{
if(T==NULL) return 0;
return NodeCount(T->left)+NodeCount(T->right)+1;
}