二叉树的链式存储结构

对于二叉树,顺序存储结构一般只用于完全二叉树。

二叉树的链式存储结构_第1张图片

#include<iostream>
using namespace std;
typedef char ElemType;
typedef struct BiNode
{
   ElemType data;
   BiNode *lchild,*rchild;
}BiNode,*BiTree;

int index = 0;
char node[10]="AB#D##C##";
void CreatBiTree(BiTree *T)
{
     ElemType ch;
 //    scanf("%c",&ch);
	 ch = node[index++];
     if('#' == ch)
     {
       *T = NULL;
     }
     else
     {
         *T = (BiTree)malloc(sizeof(BiNode));
         if(!(*T))
            exit(0);
         (*T)->data = ch;
         CreatBiTree(&(*T)->lchild);
         CreatBiTree(&(*T)->rchild);
     }
}

void PreOrderTraverse(BiTree T)
{
  if (NULL == T)
  {
	  return ;
  }
  cout<<(T->data);
  PreOrderTraverse(T->lchild);
  PreOrderTraverse(T->rchild);
}

void InOrderTraverse(BiTree T)
{
	if (NULL == T)
	{
		return;
	}
	InOrderTraverse(T->lchild);
	cout<<(T->data);
	InOrderTraverse(T->rchild);
}

void PostOrderTraverse(BiTree T)
{
	if (NULL == T)
	{
		return;
	}
	PostOrderTraverse(T->lchild);
	PostOrderTraverse(T->rchild);
	cout<<(T->data);
}

int main()
{
    BiTree T=NULL;
    CreatBiTree(&T); //&T是指向指针的指针,因为在CreatBiTree函数中,不仅要改变指针指向的值,还需要改变指针。
	cout<<"先序遍历:";
	PreOrderTraverse(T);
	cout<<endl;
	cout<<"中序遍历:";
	InOrderTraverse(T);
	cout<<endl;
	cout<<"后序遍历:";
	PostOrderTraverse(T);
	cout<<endl;
    system("pause");
}
结果


你可能感兴趣的:(二叉树的链式存储结构)