一、二叉树存储结构及先序建立
-----二叉树的存储结构-----
typedef struct BiTNode{
TElemType data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
-----先序建立二叉链表-----
Status CreateBiTree(BiTree &T)
{
char ch;
scanf("%c",&ch);
if(ch=='#')
T==NULL;
else
{
T=(BiTree)malloc(sizeof(BiTNode));
if(!T)
{
printf("error");
exit(0);
}
T->data=ch;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
return ok;
}
二、二叉树三种递归遍历算法
-----二叉树先序遍历算法-----
void PreOrder(BiTree &T)
{
if(T!=NULL){
cout<<T->data<<endl;
PreOrder(T->lchild);
PreOrder(T->rchild);
}
}
-----二叉树中序遍历算法-----
void InOrder(BiTree &T)
{
if(T!=NULL){
InOrder(T->lchild);
cout<<T->data<<endl;
InOrder(T->rchild);
}
}
-----二叉树后序遍历算法-----
void PostOrder(BiTree &T)
{
if(T!=NULL){
PostOrder(T->lchild);
PostOrder(T->rchild);
cout<<T->data<<endl;
}
}
三、求二叉树深度递归算法
int depth(BiTree root)
{
int ldepth,rdepth;
if(!root)
return 0;
else
{
ldepth=depth(root->lchild);
rdepth=depth(root->rchild);
return ldepth>rdepth?ldepth+1:rdepth+1;
}
}
四、求二叉树叶子节点数
int CountLeaf(BiTree t)
{
int m,n;
if(!T)
return 0;
if(!T->lchild&&!T->rchild)
return 1;
else{
m=CountLeaf(T->lchild);
n=CountLeaf(T->rchild);
return m+n;
}
}
五、子树交换
void Exchange(BiTree T)
{
BiTree p;
if(T){
p=T->lchild;
T->lchild=T->rchild;
T->rchild=p;
Exchange(T->lchild);
Exchange(T->rchild);
}
}