二叉树的递归遍历(c++)
图解(听网课截的图)
ps:如果一开始看不懂的话可以先从最小的一棵树看起,然后再逐渐向上拓展,这样看懂基本上问题不大。
代码实现
这里实现主要还是利用递归和指针指向下一结点。
#include <iostream>
using namespace std;
struct binarynode
{
char ch;
binarynode* Lchild;//左孩子
binarynode* Rchild;//右孩子
};
//递归遍历函数
void recursion1(binarynode* root)
{
if (root == NULL)
{
return;
}
//先序遍历,根左右,如上图解
cout<< root->ch << " ";
recursion1(root->Lchild);
recursion1(root->Rchild);
}
void recursion2(binarynode* root)
{
if (root == NULL)
{
return;
}
//中序遍历 左根右,如上图
recursion2(root->Lchild);
cout<< root->ch << " ";
recursion2(root->Rchild);
}
void recursion3(binarynode* root)
{
if (root == NULL)
{
return;
}
后序遍历 左右根,如上图
recursion3(root->Lchild);
recursion3(root->Rchild);
cout << root->ch << " ";
}
//测试
void test01()
{
binarynode nodea = { 'a',NULL,NULL };
binarynode nodeb = { 'b',NULL,NULL };
binarynode nodec = { 'c',NULL,NULL };
binarynode noded = { 'd',NULL,NULL };
binarynode nodee = { 'e',NULL,NULL };
binarynode nodef = { 'f',NULL,NULL };
binarynode nodeg = { 'g',NULL,NULL };
binarynode nodeh = { 'h',NULL,NULL };
//建立关系,按照上图所示建立树
nodea.Lchild = &nodeb;
nodea.Rchild = &nodef;
nodeb.Rchild = &nodec;
nodec.Lchild = &noded;
nodec.Rchild = &nodee;
nodef.Rchild = &nodeg;
nodeg.Lchild = &nodeh;
//递归遍历
cout << "先序遍历:";
recursion1(&nodea);
cout<< endl<< "中序遍历:";
recursion2(&nodea);
cout << endl << "后序遍历:";
recursion3(&nodea);
}
int main()
{
test01();
return 0;
}