先跟遍历和中跟遍历建树
来源:互联网 发布:c 二维数组赋值结构 编辑:程序博客网 时间:2024/05/01 13:27
#include <iostream>
using namespace std;
class Node{
public:
int value;
Node* left;
Node* right;
Node(int t):value(t),left(NULL),right(NULL){}
Node():value(0),left(NULL),right(NULL){}
};
void CreateTree(Node *root, int bstart, int bend,int mstart, int mend, int *before, int *mid, int len)
{
if (root == NULL)
return;
if ( bstart > bend )
return;
if ( mstart > mend )
return;
//前序遍历的第一个值为根节点的值
root->value = before[bstart];
//在中序遍历中找出该值所在的位置
int temp; //记下该值的位置
int count =0; //记下该左子树中有多少个节点
for ( int i=mstart; i<= mend; i++)
{
if ( mid[i] == root->value )
{
temp = i;
break;
}
count++;
}
//进行递归,建立左子树和右子树,注意子树为空的情况
if ( count == 0 )
root->left = NULL;
else
{
Node *left = new Node;
root->left = left;
CreateTree(left, bstart+1, bstart+count, mstart, temp-1, before, mid, len);
}
if ( temp == mend)
root->right = NULL;
else
{
Node *right = new Node;
root->right = right;
CreateTree(right, bstart+count+1,bend,temp+1,mend,before, mid, len);
}
}
void Later(Node *root)
{
if(root!=NULL)
{
Later(root->left);
Later(root->right);
cout<<root->value<<" ";
}
}
int main()
{
int n,a[1000],b[1000];
while(cin>>n)
{
for(int i=0;i<n;i++)
cin>>a[i];
for(int j=0;j<n;j++)
cin>>b[j];
Node *root=NULL;
root=new Node();
CreateTree(root,0,n-1,0,n-1,a,b,n);
Later(root);
}
return 0;
}
using namespace std;
class Node{
public:
int value;
Node* left;
Node* right;
Node(int t):value(t),left(NULL),right(NULL){}
Node():value(0),left(NULL),right(NULL){}
};
void CreateTree(Node *root, int bstart, int bend,int mstart, int mend, int *before, int *mid, int len)
{
if (root == NULL)
return;
if ( bstart > bend )
return;
if ( mstart > mend )
return;
//前序遍历的第一个值为根节点的值
root->value = before[bstart];
//在中序遍历中找出该值所在的位置
int temp; //记下该值的位置
int count =0; //记下该左子树中有多少个节点
for ( int i=mstart; i<= mend; i++)
{
if ( mid[i] == root->value )
{
temp = i;
break;
}
count++;
}
//进行递归,建立左子树和右子树,注意子树为空的情况
if ( count == 0 )
root->left = NULL;
else
{
Node *left = new Node;
root->left = left;
CreateTree(left, bstart+1, bstart+count, mstart, temp-1, before, mid, len);
}
if ( temp == mend)
root->right = NULL;
else
{
Node *right = new Node;
root->right = right;
CreateTree(right, bstart+count+1,bend,temp+1,mend,before, mid, len);
}
}
void Later(Node *root)
{
if(root!=NULL)
{
Later(root->left);
Later(root->right);
cout<<root->value<<" ";
}
}
int main()
{
int n,a[1000],b[1000];
while(cin>>n)
{
for(int i=0;i<n;i++)
cin>>a[i];
for(int j=0;j<n;j++)
cin>>b[j];
Node *root=NULL;
root=new Node();
CreateTree(root,0,n-1,0,n-1,a,b,n);
Later(root);
}
return 0;
}
- 先跟遍历和中跟遍历建树
- 二叉树的先跟遍历,中跟遍历,后根遍历
- BST二叉搜索树的建树和先序遍历
- 先根建树中序遍历
- 二叉树先序建树及先序遍历
- 二叉树遍历 ,根据先序和中序遍历序列建树
- 先序建树,中序遍历、层序遍历
- C/C++建树和遍历
- 二叉树-建树,层次遍历,先序遍历,中序遍历,后序遍历
- 二叉树——根据先序(后序)和中序遍历建树
- c/c++实现利用二叉树的先序遍历和中序遍历序列重建树
- 先序建树中序后序遍历及求叶子节点个数
- 输入先序遍历序列,建树----Java实现
- Tree——二叉树中序后序建树,先序遍历
- 华中科技-二叉树遍历1184,先序建树
- HDU 5444 二叉树的遍历,先根据先序遍历建树
- poj1330( 树的先跟遍历)
- 建树和遍历树(前序)
- Java一条语句断定本机的大小端
- Word中中文输入为宋体,英文输入为Times New Roman实现自动切换
- Python异常处理
- 通过测试浏览器对网页中元素请求,提出减少浏览器请求的建议
- 在 ajax应用当中的编码问题
- 先跟遍历和中跟遍历建树
- 传说中的WCF(10):消息拦截与篡改
- poj 1013(找出假币)
- android电话拨号器
- oracle 中的dual表
- 二叉树的先跟遍历,中跟遍历,后根遍历
- 数据库笔记
- Ajax Toolkit 控件——AnimationExtender
- codeforces 154 DIV2