【发布时间】:2013-08-12 04:38:22
【问题描述】:
我正在尝试从有序和预购构建二叉树。 每个节点都保存一个整数值的数据。 我在使用这些数组时遇到了问题:
预购:3,9,2,6,1,1,1,4
有序:2,9,3,1,1,1,6,4
这是从中提取遍历的原始树:
3
/ \
9 6
/ / \
2 1 4
/ \
1 1
问题是我写的函数不能区分连续相等的数字。
这是C语言中的函数:
TREE createTreeFromPreAndIn(int pre[], int in[], int n){
TREE res;
res.root = createTreeFromPreAndInHelper(pre, in, n);
return res;
}
TNODE* createTreeFromPreAndInHelper(int pre[], int in[], int n){
int index;
TNODE* rootL, *rootR, *root;
if (n == 0)
return NULL;
else {
index = findIndex(in, n, pre[0]); //returns the index of the first appearance of pre[0] in 'in'
rootL = createTreeFromPreAndInHelper(pre+1, in, index);
rootR = createTreeFromPreAndInHelper(pre+1+index, in+index+1, n-index-1);
root = createNewTreeNode(pre[0], rootL, rootR);
return root;
}
}
提前致谢
【问题讨论】:
-
当您有重复时,树结构可能不明确。您只是在寻找一种解决方案吗?
-
是的,我正在寻找特定的解决方案。当有重复时,有没有办法从 pre 和 order 中构建特定的树?
-
{In,Pre}Order 是在构建二叉树之后遍历二叉树的方法。你怎么知道你已经在或预购的序列?
-
我从我已经拥有的树中提取它们(我想发布树的图像,但我没有足够的声望点)。在我的示例中,“1,1,1”实际上是一个以 1 为根,左右子节点均为 1 的子树。
-
您能否更具体地说明您所说的“特定树”的含义?您是说您已经对树的结构有所了解,还是您的意思是在所有可能的树中,您正在寻找最符合某些标准(例如具有最小深度)的树?
标签: c binary-tree traversal