二叉树的基本操作及遍历为什么运行无结果啊
#include<stdio.h>
#include<string>
#include<iostream>
typedef int Status;
#define OK 1;
#define ERROR 0;
typedef struct BiTNode
{
char data; //数据域;Type: 用户定义数据类型
struct BiTNode *Lchild; //左指针域
struct BiTNode *Rchild; //右指针域
} BiTNode, *BiTree;
Status IniBiTree(BiTree &T)
{
//构造空树
T = (BiTNode *)malloc(sizeof(BiTNode));
if (!T)return ERROR;//构造失败
T->Lchild = T->Rchild = NULL;
return OK;
}
void CreateBiTree(BiTree &T)
{
//按先序次序输入二叉树中结点的值(一个字符),#字符表示空数,
//构造二叉链表表示的二叉树T。
char ch;
scanf_s("%c",&ch,2);
if (ch == '#')T = NULL;
if (ch == '0')return;
else
{
T = (BiTNode *)malloc(sizeof(BiTNode));
if (!T) exit(OVERFLOW);//分配失败
T->data = ch;
CreateBiTree(T->Lchild);//构造左子树
CreateBiTree(T->Rchild);//构造右子树
}
}//CreateBiTree
Status IsEmpty(BiTree T)
{
if (T)return ERROR;//非空树
return OK;//空树
}
void ClearBiTree(BiTree &T)
{
if (T)
{
if(T->Lchild)
ClearBiTree(T->Lchild);//如果有左孩子
if (T->Rchild)//如果有右孩子
ClearBiTree(T->Rchild);
free(T);//释放结点
T = NULL;//根节点为空
}
}
char GetRoot(BiTree T)
{
if (!T) return 'E';//如果是空树
else return T->data;
}
int GetDepth(BiTree T)
{//求的树的深度
int i,j;//i,j分别用来记左子树和右子树
if (!T) return 0;
if (T->Lchild) i = GetDepth(T->Lchild);
else i=0;
if (T->Rchild) j = GetDepth(T->Rchild);
else j=0;
return i > j ? i + 1 : j + 1;
}
void PreOrderTraverse(BiTree T)
{//采用二叉链表存储结构
//先序遍历二叉树T的递归算法。
if (T == NULL)return;
printf("%c", T->data);
PreOrderTraverse(T->Lchild);//遍历左子树
PreOrderTraverse(T->Rchild);//遍历右子树
}//PreOrderTraverse
void InOrderTraverse(BiTree T)
{//采用二叉链表存储结构
//中序遍历二叉树T的递归算法。
if (T == NULL)return;
InOrderTraverse(T->Lchild);//遍历左子树
printf("%c", T->data);
InOrderTraverse(T->Rchild);//遍历右子树
}//InOrderTraverse
void PostOrderTraverse(BiTree T)
{//采用二叉链表存储结构
//后序遍历二叉树T的递归算法。
if (T == NULL)return;
printf("%c", T->data);
PostOrderTraverse(T->Lchild);//遍历左子树
PostOrderTraverse(T->Rchild);//遍历右子树
}//PostOrderTraverse
int main()
{
BiTree tree;
IniBiTree(tree);//初始化二叉树
CreateBiTree(tree);//创建二叉树
printf("\n前序遍历二叉树\n");
PreOrderTraverse(tree);//前序遍历二叉树
printf("\n中序遍历二叉树\n");
InOrderTraverse(tree);//中序遍历二叉树
printf("\n后序遍历二叉树\n");
PostOrderTraverse(tree);//后序遍历二叉树
system("pause");
return 0;
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
先调整一下代码格式。
后序遍历写错了。应该是:
最关键的是,构造二叉树写错了,你应该传递的是根节点的二级指针,不然相当于拷贝传递根节点指针,是没法修改根节点指针内容的。想要修改根节点指针指向的内容,需要传递指向根节点指针的指针。可以参考我对二叉树的总结文章:http://blog.csdn.net/wzy_1988...