Redian新闻
>
请问卖房子的,都如何定价格呀
avatar
请问卖房子的,都如何定价格呀# Living
I*A
1
Given the pre-order and in-order traversing result of a binary tree, write a
function to rebuild the tree
ideas?
avatar
e*c
2
打算自己卖房子,zillow上面的价格也不靠谱呀,请过来人指点一下
avatar
d*2
3
find root from pre-order tree, use that to split left-tree, right-tree from
in-order list, recursively go down.
avatar
I*A
4
don't understand how to do this recursively.. //羞愧

from

【在 d****2 的大作中提到】
: find root from pre-order tree, use that to split left-tree, right-tree from
: in-order list, recursively go down.

avatar
d*2
5
preorder: 1 2 3 4 5
inorder: 3 2 4 1 5
root 1
left subtree preorder 2 3 4
left subtree inorder 3 2 4
right subtree preorder 5
right subtree inorder 5
recursively work on left subtree and right subtree with the known
preorder and inorder lists.
avatar
I*A
6
thanks a lot..
i can manually construct it, but 写不出来 this recursive code. :(
能否写个code看看?

【在 d****2 的大作中提到】
: preorder: 1 2 3 4 5
: inorder: 3 2 4 1 5
: root 1
: left subtree preorder 2 3 4
: left subtree inorder 3 2 4
: right subtree preorder 5
: right subtree inorder 5
: recursively work on left subtree and right subtree with the known
: preorder and inorder lists.

avatar
d*2
7
struct tree_node {
int x;
tree_node *left;
tree_node *right;
};
tree_node *build_tree(const std::vector &preorder, int start1, int end1
, const std::vector &inorder, int start2, int end2) {
if (start1 > end1)
return NULL;
if (start1 == end1) {
tree_node *tn = new tree_node;
tn->x = preorder[start1];
tn->left = NULL;
tn->right = NULL;
return tn;
}
int pos;
for (pos = start2; pos <= end2; pos++)
if (inorder[pos] == preorder[start1])
avatar
I*A
8
thanks so much first~
等我仔细看

end1

【在 d****2 的大作中提到】
: struct tree_node {
: int x;
: tree_node *left;
: tree_node *right;
: };
: tree_node *build_tree(const std::vector &preorder, int start1, int end1
: , const std::vector &inorder, int start2, int end2) {
: if (start1 > end1)
: return NULL;
: if (start1 == end1) {

avatar
j*l
9
写个简洁的从前序和中序序列重建二叉树的代码,以飨版友。
TreeNode* rebuild(char *pstr, char *istr, int n)
{
if (n <= 0)
return NULL;
TreeNode* root = new TreeNode;
root->data = *pstr;
char* iter;
for (iter = istr; iter < istr + n; iter++)
{
if (*iter == *pstr)
break;
}
int k = iter - istr;
root->left = rebuild(pstr + 1, istr, k);
root->right = rebuild(pstr + k + 1, iter + 1, n - k - 1);
return root;
}
avatar
j*l
10
这个是一年前Amazon问我的电面题。

a

【在 I**A 的大作中提到】
: Given the pre-order and in-order traversing result of a binary tree, write a
: function to rebuild the tree
: ideas?

avatar
l*g
11
这个也太常规了吧。choose root from pre-order, all the left nodes are listed
on the left in the in-order traverse, vice versa.

a

【在 I**A 的大作中提到】
: Given the pre-order and in-order traversing result of a binary tree, write a
: function to rebuild the tree
: ideas?

avatar
d*e
12
果然简洁。
发觉自己真的弱,写了一个多小时才写出无bug能正确运行的code....要多做题才行。

【在 j**l 的大作中提到】
: 写个简洁的从前序和中序序列重建二叉树的代码,以飨版友。
: TreeNode* rebuild(char *pstr, char *istr, int n)
: {
: if (n <= 0)
: return NULL;
: TreeNode* root = new TreeNode;
: root->data = *pstr;
: char* iter;
: for (iter = istr; iter < istr + n; iter++)
: {

avatar
I*A
13
这个和地主那个,各有利弊,地主那个很好理解。。
这个有没有bug?我写了个java version,对某些树,不work, 帮着看看,哪儿的问题?
public static Node buildTree(int[] preorder, int start1, int[] inorder,
int start2, int len){
if(len<=0)
return null;

Node node = new Node(preorder[start1]);

int k;
for(k=start2; kif(inorder[k] == preorder[start1])
break;

if(k==start2+len)
return null;

node

【在 j**l 的大作中提到】
: 写个简洁的从前序和中序序列重建二叉树的代码,以飨版友。
: TreeNode* rebuild(char *pstr, char *istr, int n)
: {
: if (n <= 0)
: return NULL;
: TreeNode* root = new TreeNode;
: root->data = *pstr;
: char* iter;
: for (iter = istr; iter < istr + n; iter++)
: {

avatar
d*2
14

题?
,
len-k-1

【在 I**A 的大作中提到】
: 这个和地主那个,各有利弊,地主那个很好理解。。
: 这个有没有bug?我写了个java version,对某些树,不work, 帮着看看,哪儿的问题?
: public static Node buildTree(int[] preorder, int start1, int[] inorder,
: int start2, int len){
: if(len<=0)
: return null;
:
: Node node = new Node(preorder[start1]);
:
: int k;

avatar
I*A
15
huh? where?

【在 d****2 的大作中提到】
:
: 题?
: ,
: len-k-1

avatar
d*2
16

node.right = buildTree(preorder, start1+1+(k-start2), inorder, k+1,
len-k-1);

【在 I**A 的大作中提到】
: huh? where?
avatar
I*A
17
没明白,有什么问题?
right tree should have len-k-1 nodes bah, no?

【在 d****2 的大作中提到】
:
: node.right = buildTree(preorder, start1+1+(k-start2), inorder, k+1,
: len-k-1);

avatar
d*2
18
left: k-start2
right: len-k-1
sum of above two is not len-1.
avatar
I*A
19
多谢多谢!
我太笨了~~~~~

【在 d****2 的大作中提到】
: left: k-start2
: right: len-k-1
: sum of above two is not len-1.

avatar
c*r
20
这个题如果有重复值是不是就不行了?

【在 j**l 的大作中提到】
: 写个简洁的从前序和中序序列重建二叉树的代码,以飨版友。
: TreeNode* rebuild(char *pstr, char *istr, int n)
: {
: if (n <= 0)
: return NULL;
: TreeNode* root = new TreeNode;
: root->data = *pstr;
: char* iter;
: for (iter = istr; iter < istr + n; iter++)
: {

avatar
I*A
21
nod.
the values should be unique

【在 c*r 的大作中提到】
: 这个题如果有重复值是不是就不行了?
avatar
H*r
22
The posts before are O(N lgN). There's a O(N) algorithm.

a

【在 I**A 的大作中提到】
: Given the pre-order and in-order traversing result of a binary tree, write a
: function to rebuild the tree
: ideas?

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。