二叉树与递归

Posted 陈伯爱学习

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二叉树与递归相关的知识,希望对你有一定的参考价值。

以下是2.12晚上12点前说的话



https://www.bilibili.com/video/av31650553

虽然当科学家可能性不大了,但是发财总是有可能的,在这里出售一下原始股,价格面议。




    本来想多写一些,奈何太难了,递归很难,树很难,结合到一起,我晕了,伪代码倒是挺好写的,实现就实现不出来了。

    所以明天会做难一点的练习


题意:

      给你先序遍历和中序遍历,求后序遍历。

2.13  凌晨1:06

#include<string>

#include<iostream>

using namespace std;

struct node {

int l;

int r;

char v;

}a[10000];


string first, mid;


void build(int l1, int r1, int l2, int r2)//构建一个二叉树  编号1是先序下标,编号2是中序下标   当前操作的恰好是a[l1] 

{

int p = l2;

while (mid[p] != first[l1]) p++;

int cnt = p - l2;//左子树结点个数 

a[l1].v = first[l1];

if (p > l2) a[l1].l = l1 + 1;

else a[l1].l = 0;

if (p < r2) a[l1].r = l1 + cnt + 1;

else a[l1].r = 0;

if (a[l1].l != 0) build(l1 + 1, l1 + cnt, l2, p - 1);

if (a[l1].r != 0) build(l1 + cnt + 1, r1, p + 1, r2);

}


void last(int i)

{

if (a[i].l != 0) last(a[i].l);

if (a[i].r != 0) last(a[i].r);

cout << a[i].v;

}


int main()

{


cin >> first >> mid;

int n = first.length();

for (int i = 0;i < n;i++)

a[i].v = first[i];

build(0, n - 1, 0, n - 1);

last(0);

}


这道题可以说是难度很小了,但是我死都找不到bug,我的妈,差点气的告别这个美丽的世界,调了将近5小时这个代码,我的天呐,本来都要睡觉了,光调代码了,到最后发现就是一个判断语句忘加也是醉了,一定要把这个玩意给

以上是关于二叉树与递归的主要内容,如果未能解决你的问题,请参考以下文章

二叉树与递归

两万字硬核解析树与二叉树所有基本操作(包含堆,链式二叉树基本操作及测试代码,和递归函数的书写方法)

第5章 树与二叉树

树与二叉树的转换与遍历

二叉树刷题篇平衡二叉树与二叉树的所有路径

C语言 二叉树与堆