二叉树的建立与先序,后序,中序输出

如果二叉树为:

                              a

             b                                 c

                     d                                 e

由于程序中要知道叶子结点(终点)。所以要讲上面的二叉树变成扩展二叉树(把叶子结点的孩子补成#,用作标记),扩展后就变成了:

                                    a

                    b                                 c

          #                  d              #                e

                       #             #                   #          #

那么在输入的时候,须要输入ab#d##c#e##(输入后直接回车就可以)

#include <stdio.h>
#include<stdlib.h>
#define ElemType char
//节点声明,数据域、左孩子指针、右孩子指针
typedef struct BiTNode{
char data;
struct BiTNode *lchild, *rchild;
}BiTNode, *BiTree;
BiTree createBiTree()

BiTree T;
char ch;
scanf("%c", &ch);
if (ch == '#')
T = NULL;
else
{
T = (BiTree)malloc(sizeof(BiTNode));
T->data = ch;
T->lchild = createBiTree();
T->rchild = createBiTree();
}
return T;

}

以下就是二叉树的遍历。遍历是通过递归进行遍历

//先序遍历
void PreorderTraverse(BiTree T)
{
if (T)
{
printf("%c ", T->data);
PreorderTraverse(T->lchild);

PreorderTraverse(T->rchild);
}
}
//中序遍历
void InorderTraverse(BiTree T)
{
if (T)
{

PreorderTraverse(T->lchild);
printf("%c ", T->data);
PreorderTraverse(T->rchild);
}
}
//后序遍历
void PostorderTraverse(BiTree T)
{
if (T)
{
PreorderTraverse(T->lchild);
PreorderTraverse(T->rchild);
printf("%c ", T->data);
}

}

二叉树高度的求法返回T所指向的二叉树的高度

处理方法:1.若T为空则返回0否则

                2.求出左右子树的高度L1和L2。并返回两者之中最大的。

                3.由于没有算根节点仅仅是求的左右子树。所以须要加1。

int dep(BiTree T)
{
int max;
if (T == NULL)
return 0;
else
{
max = dep(T->lchild);
if (dep(T->rchild) > max)
max = dep(T->rchild);

}
return max + 1;
}

int main(void)
{
int ch;
BiTree T;
printf("请利用先序插入法插入您要建立的二叉树! ");
T = createBiTree();
while (1)
{
printf("按下列选项选择您要进行的操作 ");
printf("1前序输出. ");
printf("2.后序输出 ");
printf("3.中序输出 ");
printf("4.退出 ");
scanf("%d", &ch);
switch (ch)
{
case 1:
PreorderTraverse(T); break;
case 2:
PostorderTraverse(T); break;
case 3:
InorderTraverse(T); break;
case 4:
return 0;
default:
break;
}


}
return 0;
    

}





以下是我做的一点点改进,利用c++中的指针引用将问题进行了简单的改动。以下是基本的两个函数。就是BST树的构建函数以及主函数

构建函数


这样的方法不须要返回值了,是直接对指针进行操作。


主函数的写法



原文地址:https://www.cnblogs.com/liguangsunls/p/6850431.html