对于已知两个遍历,重建二叉树,我表示我已经跪了。。。bug还没调好。加油吧
今天仅在晚上看了一会书,所以没有太多的记录。
抽了一段时间写了二叉树的代码,对于基本的知识还是理解的。接下来的工作主要是用非递归方式实现二叉树的三种遍历。
#include<iostream>
using namespace std;
const int N=16;
int a[N]={1,2,3,0,4,0,5,0,0,6,0};
struct tree
{
int data;
tree *left;
tree *right;
}node[N];
void CreateTree()
{
for(int i=0;i<N;i++)
node[i].data=a[i];
for(int i=0;i<N;i++)
{
if(node[i].data)
{
if(2*i+1<N&&node[2*i+1].data)
node[i].left=&node[2*i+1];
else
node[i].left=NULL;
if(2*i+2<N&&node[2*i+2].data)
node[i].right=&node[2*i+2];
else
node[i].right=NULL;
}
}
}
void VisitTree(tree *T)//可以调整前序遍历、中序遍历、后序遍历
//算法复杂度为O(n),递归工作栈的深恰好为树的高度。
{
if(T!=NULL)
{
VisitTree(T->left);
VisitTree(T->right);
cout<<T->data<<'/';
}
}
int main()
{
CreateTree();
VisitTree(&node[0]);
getchar();
}