二叉树先序中序递归与迭代遍历实现
代码
#include <stdio.h>
#include <stdlib.h>
typedef struct BINARYNODE
{
char ch;
struct BINARYNODE *lchild;
struct BINARYNODE *rchild;
}BinaryNode;
//先序(递归)
void Recursion1(BinaryNode *root)
{
if(root == NULL)
{
return;
}
printf("%c",root->ch);
Recursion(root->lchild);
Recursion(root->rchild);
}
//先序(非递归)
void Porderf(BinaryNode *root)
{
int top=0;
BinaryNode *p, *s[10];
p=root;
while (p || top)
{
while (p!=NULL)
{
printf("%c\t",p->ch);
s[top++]=p;
p=p->lchild;
}
if(top>0)
{
p=s[--top];
p=p->rchild;
}
}
}
//中序(非递归)
void inorderf(BinaryNode *root)
{
int top=0;
BinaryNode *p, *s[10];
p=root;
while (p || top)
{
while (p!=NULL)
{
s[top++]=p;
p=p->lchild;
}
if(top>0)
{
p=s[--top];
printf("%c",p->ch);
p=p->rchild;
}
}
}
//中序(递归)
void Recursion2(BinaryNode *root)
{
if(root == NULL)
{
return;
}
Recursion(root->lchild);
printf("%c",root->ch);
Recursion(root->rchild);
}
void CreateBinaryTree()
{
BinaryNode node1 = {'A',NULL,NULL};
BinaryNode node2 = {'B',NULL,NULL};
BinaryNode node3 = {'C',NULL,NULL};
BinaryNode node4 = {'D',NULL,NULL};
BinaryNode node5 = {'E',NULL,NULL};
BinaryNode node6 = {'F',NULL,NULL};
BinaryNode node7 = {'G',NULL,NULL};
BinaryNode node8 = {'H',NULL,NULL};
node1.lchild = &node2;
node1.rchild = &node6;
node2.rchild = &node3;
node3.lchild = &node4;
node3.rchild = &node5;
node6.rchild = &node7;
node7.lchild = &node8;
Porderf(&node1);//先序(递归)
// Recursion1(&node1);//先序(非递归)
// inorderf(&node1);//中序(非递归)
// Recursion2(&node1);//中序(递归)
}
int main()
{
CreateBinaryTree();
return 0;
}
二叉树参考