2 apprentices apprentices 于 2016.05.08 13:12 提问

关于二叉树中根和后根构造二叉树求大神帮忙看看有没有什么问题?

#include
using namespace std;

template
class BinaryNode
{
public:
T data;
BinaryNode *left, *right;
BinaryNode(T data, BinaryNode*left = NULL, BinaryNode*right = NULL)
{
this->data = data;
this->left = left;
this->right = right;
}
};

template
class BinaryTree
{
public:
BinaryNoderoot;
BinaryTree();
BinaryTree(T prelist[], int n);
BinaryTree(T inlist[], T postlist[], int n);
BinaryNode
create(T prelist[], int n, int &i);
~BinaryTree();
};
template
BinaryTree::BinaryTree()
{
this->root = NULL;
}

template
BinaryTree::BinaryTree(T prelist[], int n)
{
int i = 0;
this->root = this->create(T prelist[], int n, int &i);
}
template
BinaryNode* BianryTree::create(T prelist[], int n, int &i)
{
BinaryNode*p = NULL;
if (i < n)
{
T elem = prelist[i];
i++;
if (elem != NULL)
{
p = new BianryNode(elem);
p->left = create(prelist, n, i);
p->right = creat(prelist, n, i);
}
}
return p;
}
template
BinaryTree::BinaryTree(T inlist[], T postlist[], int n) //中根和后跟次序构造二叉树
{
BinaryNode*p = NULL;
if (n >0)
{
p = new BinaryNode(postlist[n-1]);
for (int i = 0; i < n;i++)
if (inlist[i] == postlist[n - 1])
break;
p - >left = new BinaryNode(T inlist[], T postlist[], i);
p -> right = new BinaryNode(T inlist[], T postlist[], n-1);
}
return p;
}

2个回答

havedream_one
havedream_one   2016.05.08 19:14
qq423399099
qq423399099   Ds   Rxr 2016.05.08 20:36

不妨自己先单步看看和自己想的是否一样
单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
中根遍历和先根遍历/后根遍历构建二叉树
1问题 给定二叉树的2个遍历序列(如先根+中根,先根+后根,中根+后根等),是否能够根据这2个遍历序列唯一确定二叉树? 2结论 这三种组合并不是都能唯一确定二叉树的,其中先根+后根就不能唯一确定一棵二叉树,中根+先根/后跟可以唯一确定一棵二叉树。因为先根/后根可以确定二叉树根节点是哪个,而中根可以将二叉树分为根节点和其左子树和其右子树,进而可以将先根/后根分成"根+左子树先根+右子树先根“
利用中根序列和后根序列重建二叉树
问题:已知二叉树的后根序列和中根序列,请构造此二叉树。  分析:对于提供了后根序列和中根序列的一棵二叉树,其结构信息是完备的。考虑后根序列a(1)->a(n),中根序列b(1)->b(n)。我们知道中根序列b(1)->b(n)包含一颗完整的二叉树,那么中根序列里面肯定有一个元素b(i)是该二叉树的根。而根据中根序列的定义,b(i)前面的元素构成的一个序列b(1)->b(i-1)是
以后根和中根序列构造二叉树
构造二叉树template BinaryTree::BinaryTree(T postlist[], T inlist[], int n)   //以先根和中根序列构造二叉树{                                                //n指定序列长度    root = create(postlist, inlist, n-1, 0, n);}template BinaryNode* BinaryTree::create(T postlist[],  T inlist
数据结构-树-已经知道先根(后根)和中根 构建树(转载)
已知二叉树的先/后根序遍历和中根序遍历可唯一确定一棵二叉树,数据结构试题中常有已知先(后)根序遍历要求确定后(先)根序遍历题型。一般的,我们要按照已知的条件把二叉树画出来,再按图写出结果。这样麻烦的事常让我感到混乱而不得不出错。经过研究我找出了一种不用画图,由先(后)根序遍历和中根序遍历迅速确定遍历结果的办法。谨以此文献给智商与我同级而又不得不研究算法的朋友。 抽象思维太差,用例子来说明吧。下面这
二叉树的创建、先根、中根、后根遍历
树的定义: 树是n个结点的有限集。 n=O 时称为空树。 在任意-棵非空树中: ( 1 )有且仅有一·个特定的根结点: (2)若干子树(互不相交)  树的定义是递归定义的 二叉树( Binary Tree) 是 n个结点的有限集合,该集合或者为空集(称为空二叉树),戴者由一个根结点和两颗互不相交的、分别称为根结点的左子树和右子树的二叉树组成 。 二叉树结点的定义: typed
二叉树基础-由中根序列和后根序列重建二叉树(数据结构基础 第5周)
问题描述 分析 1. 这道题建立二叉树需要使用递归来做,具体思路可参考:http://blog.csdn.net/ditian1027/article/details/19981849 2. 下面代码中需要注意一点,在createTree()函数中使用指针作为函数返回值,并且这个指针又是在函数内定义,这样是有风险的,因为函数结束时这个指针内存就被释放了(这里程序能AC通过只是碰巧而已)
【Openjudge】由中根序列和后根序列重建二叉树
代码写的比较乱,凑合看吧。#include #include #include #include using namespace std; class node{ public: int num; node *left; node *right; public: node(int n = 0){ num = n; left = NULL; right = NULL; } }
JAVA二叉树,给出先序遍历和中序遍历,构造出新的二叉树
注意点; 1.确定整棵二叉树的根节点即先序遍历中的第一个元素root 2.确定root在中序遍历元素的位置,root左边的元素为二叉树的左子树元素Lchild,右边为右子树元素Rchild 3.在先序遍历中找到最先出现Lchild中元素的那个元素,为Lchild的根节点——root的左孩子节点,同理找出Rchild的根节点——root的右孩子节点 4.重复2,3步骤直至二叉树构建完成;
设二叉树结点的先根序列、中根序列和后根序列中,所有叶子结点的先后顺序____。
设二叉树结点的先根序列、中根序列和后根序列中,所有叶子结点的先后顺序____。 正确答案: A   你的答案: E (错误) 三者相同 只有先序和中序相同,与后序不同 只有中序和后序相同,与先序不同 只有先序和后序相同,与中序不同 视树的情况而定 三者都不相同 添加笔记 求解答(0) 收藏 纠错
二叉树的操作之由中根和后跟序列重建二叉树
#include &amp;lt;iostream&amp;gt; #include &amp;lt;vector&amp;gt; #include &amp;lt;string&amp;gt; #include &amp;lt;malloc.h&amp;gt; #include &amp;lt;stdio.h&amp;gt; #include &amp;lt;string.h&amp;gt; using namespace std; typedef struct node { in...