// 二叉树的建立.cpp : 定义控制台应用程序的入口点。
//
#include <iostream>
using namespace std;
//定义二叉排序树的节点
typedef struct Node
{
int data;
struct Node * lchild;//左孩子
struct Node * rchild;//右孩子
}Node,* PNode;
PNode T=NULL;//二叉排序树的根节点
//中序遍历二叉树
void MidSequence(PNode t)
{
if(t!=NULL)
{
MidSequence(t->lchild);
cout<<t->data<<" ";
MidSequence(t->rchild);
}
}
//往二叉排序树中插入一个新节点(非递归实现)
void CreateBSortTree(PNode & t,int data)
{
//建立一个新节点
PNode p=(PNode)malloc(sizeof(Node));
p->data=data;
p->lchild=NULL;
p->rchild=NULL;
if(t==NULL)
{
t=p;
return;
}
PNode q=t,parent;//q为parent的子女
//找到要插入结点的叶子结点 ,该叶子结点作为新插入结点的父亲
do{
parent=q;//父结点
if(parent->data>data)
q=parent->lchild;
else
q=parent->rchild;
}while(q!=NULL);
if(parent->data>data)
parent->lchild=p;
else
parent->rchild=p;
}
//往二叉排序树中插入一个新节点(递归实现)
void CreateBSortTree2(PNode & t,int data)
{
if(t==NULL)
{
//建立一个新节点
PNode p=(PNode)malloc(sizeof(Node));
p->data=data;
p->lchild=NULL;
p->rchild=NULL;
t=p;// <==>上一次调用的 t->lchild或者t->rchild = p
return;
}
else if(t->data>data)//小于当前根结点的值 递归左子树
CreateBSortTree2(t->lchild,data);
else//否则 递归右子树
CreateBSortTree2(t->rchild,data);
}
//测试
int main()
{
int a[]={0,5,8,4,2,3,7};
int len=sizeof(a)/sizeof(int);
for(int i=0;i<len;i++)
{
//CreateBSortTree2(T,a[i]);
CreateBSortTree(T,a[i]);
}
MidSequence(T);
cout << endl;
return 0;
}