终于自己搞定二叉树的4种遍历,单单看博客没有人讲还是很难懂得,建议大家学习的时候,看一遍博客,然后自己手动递归,就很容易懂了,不要用脑子去递归- -。
深刻理解下遍历的原理。
//所谓建树就是指的是给定一个一个节点可以找出他的左右孩子
//不建树求某一层次遍历(一般求前后遍历可以不建树)
//精髓就是根据n来限制树枝的个数,写一个简单的三层满2叉树,自己手动递归一下就会懂
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
void print_postOrder(int n, char *pre, char *in) //n代表节点个数,pre前 in 中 post后,不建树用void
{
if(n <= 0) return; //最后一步肯定是传进来n = 1,然后pre[0] p = 0时候pre[0]= in[p],然后就return,输出最下面的左孩子
int cnt, p = 0;
while(in[p] != pre[0]) p++; //求出左子树的叶子个数
print_postOrder(p, pre+1, in);//打印左子树
print_postOrder(n - p - 1, pre + p + 1, in + p + 1); //打印右子树
printf("%c", pre[0]); //打印根节点 ///根据需要输出的序列的不同,把这句话放在不同位置,改为post[n-1]
}
int main(void)
{
char inOrder[105], preOrder[10