参考《大话数据结构》P187~188——二叉树的建立。
举个简单的例子:
代码和解释如下(VS2012测试通过):
1 #include <iostream> 2 using namespace std; 3 4 //二叉树的二叉链表结点结构定义 5 typedef struct BiTNode 6 { 7 char data; 8 struct BiTNode *lchild,*rchild; 9 }BiTNode; 10 11 //输入前序遍历,创建二叉树 12 //这里输入AB#D##C## 13 void CreateBiTree(BiTNode **T)//*T是指向BiTNode的指针 14 { 15 *T=new BiTNode; 16 if(*T==NULL)//如果*T还是指向NULL,表示内存分配失败,退出程序 17 exit(OVERFLOW); 18 char ch; 19 cin>>ch; 20 if(ch==‘#‘) 21 *T=NULL; 22 else 23 { 24 (*T)->data=ch;//*T指向的节点的data分配内容,即生成根节点 25 CreateBiTree(&((*T)->lchild));//创建&(*T)->lchild临时变量,传入CreateBiTree,构造左子树 26 CreateBiTree(&((*T)->rchild));//创建&(*T)->rchild临时变量,传入CreateBiTree,构造右子树 27 // 相当于 28 // BiTNode **p1; 29 // p1=&((*T)->lchild);//不能直接p1=&lchild 30 // CreateBiTree(p1); 31 // BiTNode **p2; 32 // p2=&((*T)->rchild);//不能直接p2=&rchild 33 // CreateBiTree(p2); 34 } 35 } 36 37 //二叉树的前序遍历 38 void PreOrderTraverse(BiTNode *B) 39 { 40 if(B==NULL) return;//如果指向空结点,直接返回 41 cout<<B->data<<" ";//输出该结点的data 42 PreOrderTraverse(B->lchild);//前序遍历左子树 43 PreOrderTraverse(B->rchild);//前序遍历右子树 44 return; 45 } 46 47 int main() 48 { 49 BiTNode **pp;//定义指向BiTNode的二级指针pp 50 BiTNode *p;//定义指向BiTNode的指针p 51 pp=&p;//pp指向p 52 p=NULL;//初始化p指向NULL 53 54 CreateBiTree(pp);//传入指向p的地址,创建二叉树 55 56 PreOrderTraverse(p);//传入指向BiTNode的地址,前序遍历创建好的二叉树,验证二叉树的创建是否正确 57 cout<<endl; 58 }
运行结果:
时间: 2024-10-08 09:48:52