二叉树的先序建立思路就像先序遍历一样 ,利用递归思想。
链接:二叉树遍历
#include<stdio.h>
#include<stdlib.h>
typedef struct BinaryTreeNode {
int num;
struct BinaryTreeNode* leftNode;
struct BinaryTreeNode* rightNode;
}BTNode,*PBTNode;
/*
*先序遍历
*/
void PreOrder(PBTNode pHead) {
if (NULL == pHead) {
return;
}
printf("%d ",pHead->num); //先根节点
PreOrder(pHead->leftNode); //再先序遍历左子树
PreOrder(pHead->rightNode); //再先序遍历右子树
}
/*
*中序遍历
*/
void InOrder(PBTNode pHead){
if (NULL == pHead) {
return;
}
InOrder(pHead->leftNode);
printf("%d ", pHead->num);
InOrder(pHead->rightNode);
}
/*
*后序遍历
*/
void PostOrder(PBTNode pHead) {
if (NULL == pHead) {
return;
}
PostOrder(pHead->leftNode);
PostOrder(pHead->rightNode);
printf("%d ", pHead->num);
}
/*
*先序创建二叉树
*/
PBTNode Init() {
int num;
PBTNode pHead;
scanf("%d", &num);
if (-1 == num) {
pHead = NULL;
}
else
{
pHead = (PBTNode)malloc(sizeof(BTNode));
pHead->num = num;
pHead->leftNode=Init(); //递归
pHead->rightNode = Init();
}
return pHead;
}
int main() {
PBTNode pHead= Init();
puts("先序遍历");
PreOrder(pHead);
puts("\n中序遍历");
InOrder(pHead);
puts("\n后序遍历");
PostOrder(pHead);
return 0;
}
创建上图的树 -1代表节点空指针