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   2016.05.08 19:14
qq423399099      2016.05.08 20:36

1问题 给定二叉树的2个遍历序列（如先根+中根，先根+后根，中根+后根等），是否能够根据这2个遍历序列唯一确定二叉树？ 2结论 这三种组合并不是都能唯一确定二叉树的，其中先根+后根就不能唯一确定一棵二叉树，中根+先根/后跟可以唯一确定一棵二叉树。因为先根/后根可以确定二叉树根节点是哪个，而中根可以将二叉树分为根节点和其左子树和其右子树，进而可以将先根/后根分成"根+左子树先根+右子树先根“

【Openjudge】由中根序列和后根序列重建二叉树

JAVA二叉树，给出先序遍历和中序遍历，构造出新的二叉树

#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...