龙空技术网

C/C++编程笔记:简单遍历二叉树,遍历源码献上

C语言编程 326

前言:

此时咱们对“先序遍历构造二叉树的算法”可能比较注重,兄弟们都需要知道一些“先序遍历构造二叉树的算法”的相关资讯。那么小编也在网上搜集了一些对于“先序遍历构造二叉树的算法””的相关内容,希望咱们能喜欢,朋友们快快来学习一下吧!



/* 先序创建一棵任意二叉树 */

/* 注意:输入数据的顺序很有特点,本题输入的顺序要求为,先是根节点,再是左子树,再是右子树 */

#include

#include

using namespace std;

typedef int ElementType; //给int起别名为ElementType, typedef是起别名的意思

typedef struct bitnode //定义二叉树节点数据类型

{

ElementType data;

struct bitnode *left, *right;

} bitnode, *bitree; //bitree为指向bitnode这种结构的指针

//先序创建一棵二叉树

bitree PerCreateTree()

{

bitree T;

ElementType item;

cin >> item;

if( item == 0 ) //叶节点数据标志:其后根两个0

T = NULL; //若某一节点为叶子结点,则其左右子树均为NULL,0表示建空树

else

{

T = (bitree)malloc(sizeof(bitnode));

T->data = item;

T->left = PerCreateTree(); //递归创建其左子树

T->right = PerCreateTree(); //递归创建其右子树

}

return T; //返回根节点

}

//先序递归遍历二叉树

void PerOrder(bitree T)

{

if( T ) // T != NULL

{

cout << T->data << " ";

PerOrder(T->left); //递归先序周游其左子树

PerOrder(T->right); //递归先序周游其右子树

}

}

void InOrder(bitree T)

{

if(T)

{

InOrder(T->left);

cout<data<<" ";

InOrder(T->right);

}

}

void inorder(bitree T)

{

//还是模拟上面的遍历过程

bitree ptr[20];

int top = -1;

/*下面的双重判断和前面的一样,在进栈、出栈的过程中可能会出现栈空的情况,而此时的遍历还没有结束,

所以需要据此来维持循环的进行。*/

while(T || top!=-1)

{

while(T)

{

ptr[++top] = T;

T = T->left;

}

if(top!=-1)

{

T = ptr[top--];

cout<data<<" "; //输出在出栈后

T = T->right;

}

}

}

//后序递归遍历二叉树

void PostOrder(bitree T)

{

if( T ) // T != NULL

{

PostOrder(T->left); //递归先序周游其左子树

PostOrder(T->right); //递归先序周游其右子树

cout << T->data << " ";

}

}

//释放空间

bitree FreeTree(bitree T)

{

if( T )

{

FreeTree(T->left); //递归释放其左子树

FreeTree(T->right); //递归释放其右子树

free(T); //释放根节点

T = NULL; //释放指向根节点的指针

}

return T; //返回释放后的根节点NULL

}

int main()

{

bitree root;

cout << "请输入数据先序创建一棵二叉树:";

root = PerCreateTree(); //先序创建一棵二叉树

cout << "先序递归遍历的结果:";

PerOrder(root); //先序递归遍历

cout << endl;

cout << "中序递归遍历的结果:";

InOrder(root); //中序递归遍历

cout << endl;

cout << "中序非递归遍历的结果:";

inorder(root); //中序非递归遍历

cout << endl;

cout << "后序递归遍历的结果:";

PostOrder(root); //后序递归遍历

cout << endl;

return 0;

}

运行结果:

请输入数据先序创建一棵二叉树:4 6 8 0 0 1 0 0 2 0 0

先序递归遍历的结果:4 6 8 1 2

中序递归遍历的结果:8 6 1 4 2

中序非递归遍历的结果:8 6 1 4 2

后序递归遍历的结果:8 1 6 2 4

想要在程序员生涯内有更高的成就的话,最最重要的是尽可能的提升自己的编程能力,并且,与其想着怎么去提升,不如从现在开始动手动脑,如果对于C/C++感兴趣的话,可以关注+私信小编【C/C++编程】有一些视频希望可以帮助到你,学习不怕从零开始,就怕从不开始。


标签: #先序遍历构造二叉树的算法