Devc++ 二叉树实现求大佬指教
#include<stdio.h>#include<stdlib.h>
/*
1.了解二叉树
1.1基本概念
根结点
左子树指针
右子树指针
孩子结点
父节点
兄弟结点
姐妹结点
2.二叉树的遍历
*/
//描述单一个体
typedef struct treeNode{
char data;//数据域字符表示
struct treeNode* LChild;
struct treeNode* RChild;
}TREE,LPTREE;
/*
LPSTR char *
LPCSTR const char*
*/
//别名中lp一般表示是指针别名
//没有规律的树
void insertNode(int LPTREE[],int LChild,char *LPTREE,char *RChild)
{
parentNode->LChild = LChild;
parentNode->RChild = RChild;
}
//打印当前结点中的元素
void printfCurNodeDate(LPTREE curDate)
{
printf("%c\t,curData->data");
}
//递归法:领悟
//先序遍历:根 左 右
void preOrder(LPTREE root)
{
if(root != NULL)
{
printCurNodeData(root);//根
preOrder(root->LChild);//左
preOrder(root->RChild);//右
}
}
void preOderByStack(LPTRUE root)
{
if(root == NULL) return;
struct treeNode* stack[10];//存储每次打印节点位置
int stackTop = -1; //栈顶标记
//stackTop=50
//栈容量的是0-50
LPTREE pMove = root;//从根结点开始做打印
while(stackTop != -1 ||pMove)
{
//根 左 右
//找到最左边
while(pMove)
{
//把路径入栈+打印走过的节点
printf("%c\t",pMove->data) ;
stack[++stakckTop]= pMove;
pMove = pMove->LChild
}
//if(stackTop!=-1)
{
pMove = stack[stackTop];//获取栈顶元素
stackTop--;//出栈
pMove=pMove->RChild;
}
}
}
//中序遍历:
void midOrder(LPTREE root)
{
if(root != NULL)
{
midOrder(root->LChild);//左
printCurNodeData(root);//根
midOrder(root->RChild);//右
}
}
//后序遍历:
void lastOrder(LPTREE root)
{
if(root != NULL)
{
lastOrder(root->LChild);//左
printCurNodeData(root);//根
lastOrder(root->RChild);//右
}
}
int main()
{
LPTREE A = createNode('A');
LPTREE B = createNode('B');
LPTREE C = createNode('C');
LPTREE D = createNode('D');
LPTREE E = createNode('E');
LPTREE F = createNode('F');
LPTREE G = createNode('G');
insertNode(A,B,C);
insertNode(B,D,NULL);
insertNode(D,NULL,G);
insertNode(C,E,F);
printf("先序遍历:\n") ;
preOrder(A);
printf("\n");
preOderByStack(A);
printf("\n中序序遍历:\n") ;
preOrder(A);
printf("\n后序遍历:\n") ;
preOrder(A);
system("pause");
return 0;
}