1、看懂二叉链表树的创建算法Status CreatBiTree(BiTree &T)和其他代码。 2、将二叉树的其他基本操作函数补充完整: Status PreOrder(BiTree T) //按先序次序(递归)访问二叉树 Status InOrder(BiTree T) //按中序次序(递归)访问二叉树 Status PostOrder(BiTree T) //按后序次序(递归)访问二叉树 Status PrePrintLeaf(BiTree T) //按先序次序(递归)输出叶子结点 Status CountLeafNum(BiTree T) //统计叶子结点的个数 Status PostPrintNode(BiTree T) //按后序次序(递归)输出度为2的结点 int PostTreeDepth (BiTree T) //获取二叉树的高度
时间: 2023-12-10 13:36:55 浏览: 76
1. 二叉链表树的创建算法
```
Status CreatBiTree(BiTree &T) {
char ch;
scanf("%c", &ch);
if (ch == ' ') {
T = NULL;
} else {
T = (BiTree)malloc(sizeof(BiNode));
if (!T) return ERROR;
T->data = ch;
CreatBiTree(T->lchild);
CreatBiTree(T->rchild);
}
return OK;
}
```
2. 二叉树基本操作函数
```
//先序遍历(递归)
Status PreOrder(BiTree T) {
if (T) {
printf("%c ", T->data);
PreOrder(T->lchild);
PreOrder(T->rchild);
}
return OK;
}
//中序遍历(递归)
Status InOrder(BiTree T) {
if (T) {
InOrder(T->lchild);
printf("%c ", T->data);
InOrder(T->rchild);
}
return OK;
}
//后序遍历(递归)
Status PostOrder(BiTree T) {
if (T) {
PostOrder(T->lchild);
PostOrder(T->rchild);
printf("%c ", T->data);
}
return OK;
}
//先序遍历输出叶子节点
Status PrePrintLeaf(BiTree T) {
if (T) {
if (!T->lchild && !T->rchild) printf("%c ", T->data);
PrePrintLeaf(T->lchild);
PrePrintLeaf(T->rchild);
}
return OK;
}
//统计叶子节点个数
Status CountLeafNum(BiTree T) {
static int count = 0;
if (T) {
if (!T->lchild && !T->rchild) count++;
CountLeafNum(T->lchild);
CountLeafNum(T->rchild);
}
return count;
}
//后序遍历输出度为2的节点
Status PostPrintNode(BiTree T) {
if (T) {
PostPrintNode(T->lchild);
PostPrintNode(T->rchild);
if (T->lchild && T->rchild) printf("%c ", T->data);
}
return OK;
}
//获取二叉树的高度
int PostTreeDepth(BiTree T) {
if (!T) return 0;
int leftDepth = PostTreeDepth(T->lchild);
int rightDepth = PostTreeDepth(T->rchild);
return (leftDepth > rightDepth ? leftDepth : rightDepth) + 1;
}
```
阅读全文