先序遍历的顺序建立二叉链表
【算法步骤】
①扫描字符序列,读入字符ch
②如果ch是一个“#”字符,则表明该二叉树为空树,即 T 为NULL;否则执行以下操作:
- 申请一个结点空间 T
- 将 ch 赋给T->data
- 递归创建T的左子树
- 递归创建T的右子树
【算法描述】
void CreateBiTree(BiTree &T)
{
cin >> ch;
if(ch=='#') T=NULL; //递归结束,建空树
else
{
T=new BiTNode; //生成根结点
//或T=(BiTNode*)malloc(sizeof(BiTNode));
T->data=ch; //根结点数据域置为ch
CreateBiTree(T->lchild); //递归创建左子树
CreateBiTree(T->rchild); //递归创建右子树
}
}
复制二叉树
【算法步骤】
如果是空树,递归结束,否则执行以下操作:
- 申请一个新结点空间,复制根结点
- 递归复制左子树
- 递归复制右子树
【算法描述】
void Copy(BiTree T,BiTree &newT)
{
if(T==NULL) //如果是空树,递归结束
{
newT=NULL;
return;
}
else
{
NewT=new BiTNode;
NewT->data=T->data; //复制根结点
Copy(T->lchild,NewT->lchild); //递归复制左子树
Copy(T->rchild,NewT->rchild); //递归复制右子树
}
}
计算二叉树的深度
【算法步骤】
如果是空树,递归结束,深度为0,否则执行以下操作:
- 递归计算左子树的深度记为m
- 递归计算左子树的深度记为n
- 如果 m 大于 n,二叉树的深度为 m+1,否则为 n+1
【算法描述】
int Depth(BiTree T)
{
if(T==NULL) return 0; //空树,深度为0,递归结束
else
{
m=Depth(T->lchild); //递归计算左子树的深度记为m
n=Depth(T->rchild); //递归计算右子树的深度记为n
if(m>n) return (m+1);//二叉树的深度为m与n的较大者加1
else return (n+1);
}
}
统计二叉树中结点的个数
【算法描述】
int NodeCount(BiTree T)
{
if(T==NULL) return 0; //空树,则结点个数为0,递归结束
else return NodeCount(T->lchild)+NodeCount(T->rchild)+1;
//结点个数为左子树的结点个数+右子树的结点个数+1
}
计算二叉树叶子结点数
【算法描述】
int LeadCount(BiTree T)
{
if(T==NULL) return 0; //空树返回0
if(T->lchild==NULL && T->rchild==NULL)
return 1; //叶子结点返回1
else
return LeadCount(T->lchild)+LeadCount(T->rchild);
}
借鉴:《数据结构》严蔚敏
来源:CSDN
作者:wmy0217_
链接:https://blog.csdn.net/wmy0217_/article/details/104174501