二叉树以及二叉搜索树的重建
2012-12-05 10:05
253 查看
1) 二叉树的重建。
提供,前序和中序 Or 后序和中序。
算法:前序或者后序作为主要数据来源,中序用来确定递归位置的分割。
Node* buildTreePreIn(string pres, string ins)
{
Node* root = new Node;
root.val = pres[0];
int index = ins.find(pres[0]);
root->left = buildTree( pres.substr(1, index+1), ins.substr(0, index));
root->right = buildTree(pres.substr(index+1), ins.substr(index+1));
return root;
}
Node* buildTreePostIn(string posts, string ins)
{
Node* root = new Node;
int len = posts.size();
root.val = posts[len-1];
int index = ins.find(posts[len-1]);
root->left = buildTree( posts.substr(0, index), ins.substr(0, index));
root->right = buildTree(posts.substr(index, len-1), ins.substr(index+1));
return root;
}
2) 二叉搜索树的重建
与重建普通二叉树类似,但二叉搜索树只需要知道前序或者后序就可以,因为相应的index可以通过比大小得到。
Node* buildTreeSearchPre(string pres)
{
Node* root = new Node;
root.val = pres[0];
int ln= leftchildNumber(pres);
root->left = buildTree( pres.substr(1, ln+1));
root->right = buildTree(pres.substr(ln+1));
return root;
}
Node* buildTreeSearchPosts(string posts)
{
Node* root = new Node;
int len = post[len-1];
root.val = posts[len-1];
int ln= leftchildNumber(posts);
root->left = buildTree( posts.substr(0, ln));
root->right = buildTree(posts.substr(ln, len-1));
return root;
}
提供,前序和中序 Or 后序和中序。
算法:前序或者后序作为主要数据来源,中序用来确定递归位置的分割。
Node* buildTreePreIn(string pres, string ins)
{
Node* root = new Node;
root.val = pres[0];
int index = ins.find(pres[0]);
root->left = buildTree( pres.substr(1, index+1), ins.substr(0, index));
root->right = buildTree(pres.substr(index+1), ins.substr(index+1));
return root;
}
Node* buildTreePostIn(string posts, string ins)
{
Node* root = new Node;
int len = posts.size();
root.val = posts[len-1];
int index = ins.find(posts[len-1]);
root->left = buildTree( posts.substr(0, index), ins.substr(0, index));
root->right = buildTree(posts.substr(index, len-1), ins.substr(index+1));
return root;
}
2) 二叉搜索树的重建
与重建普通二叉树类似,但二叉搜索树只需要知道前序或者后序就可以,因为相应的index可以通过比大小得到。
Node* buildTreeSearchPre(string pres)
{
Node* root = new Node;
root.val = pres[0];
int ln= leftchildNumber(pres);
root->left = buildTree( pres.substr(1, ln+1));
root->right = buildTree(pres.substr(ln+1));
return root;
}
Node* buildTreeSearchPosts(string posts)
{
Node* root = new Node;
int len = post[len-1];
root.val = posts[len-1];
int ln= leftchildNumber(posts);
root->left = buildTree( posts.substr(0, ln));
root->right = buildTree(posts.substr(ln, len-1));
return root;
}
相关文章推荐
- 二叉树的遍历以及重建(Python实现)
- 二叉树以及二叉搜索树两个节点的公共祖先
- 剑指offer 01-06解答思路以及代码(顺序数组找特定数字,替换空格字符,链表反转输出,重建二叉树,两个栈实现队列效果,旋转数组最小元素)
- 二叉树的建立、遍历,以及给定二叉树前序遍历和中序遍历重建二叉树问题。
- 重建二叉树以及树的遍历
- 通过前序遍历和中序遍历重建二叉树以及输出后序遍历(Java实现)(二)
- 通过前序遍历和中序遍历重建二叉树以及输出后序遍历(Java实现)
- 重建二叉树,二叉树的镜像,二叉搜索树的后序遍历
- C语言-二叉树基本操作以及二叉搜索树基本操作
- 重建二叉树_C++
- 关于重建二叉树问题已经二叉树前序排列和中序排列求二叉树
- 输入某二叉树的前序遍历和中序遍历的结果,重建出该二叉树
- 剑值offer(4)-重建二叉树
- 重建二叉树
- NYOJ221二叉树重建(已知先序和中序求后序)
- 重建二叉树(面试题 6)
- 剑指Offer - 九度1385 - 重建二叉树
- 试求N个节点所能组成的二叉树的个数以及求解方法
- 二叉树的遍历 递归以及非递归
- 根据给定先序和中序序列来重建二叉树