由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 这种解法对吗?merge two BST
相关主题
发几道Google面试题(Phone and Onsite)一道二叉树的题
讨论一道两个linked list的题目上一道G家题
MS面试题判断(二叉)树是否镜像对称
请教一个BST找Median的题目Lowest common ancestor of two nodes of Binary Tree
amazon on-site interview面试题
问个题,怎么比较两个tree是topological same?这个Binary Tree的题来看看
How to find the kth biggest number in a BST微软面试的一道题
在版上看到的G题BST 里面的 null 是啥意思?
相关话题的讨论汇总
话题: root2话题: root1话题: node话题: bst话题: mergebst
进入JobHunting版参与讨论
1 (共1页)
w***o
发帖数: 109
1
看到很多解法都是in-order遍历两个BST,merge两个array,然后再重构BST,为什么这
么啰嗦?
不能这样直接merge吗?基本思想就是,比较root1和root2,如果root2大的话,把
root2断为两个子树,一个的根是root2的左孩子,另一个是root2及其右子树。把root2
及其右子树与root1的右子树合并,把root2的左孩子与root1继续合并:
Node mergeBST(Node root1, Node root2) {
if (root1 == null || root2 == null)
return root1 == null? root2 : root1;

if (root1.data <= root2.data)
{
Node left = root2.left;
root2.left = null;
root1.right = mergeBST(root1.right, root2);
root1 = mergeBST(root1, left);
} else {
//..........
}

return root1;
}
这样的解法是不对?不快?还是有其它不好?
l***m
发帖数: 339
2
我会你这么解,肯定不会merge两个array。

root2

【在 w***o 的大作中提到】
: 看到很多解法都是in-order遍历两个BST,merge两个array,然后再重构BST,为什么这
: 么啰嗦?
: 不能这样直接merge吗?基本思想就是,比较root1和root2,如果root2大的话,把
: root2断为两个子树,一个的根是root2的左孩子,另一个是root2及其右子树。把root2
: 及其右子树与root1的右子树合并,把root2的左孩子与root1继续合并:
: Node mergeBST(Node root1, Node root2) {
: if (root1 == null || root2 == null)
: return root1 == null? root2 : root1;
:
: if (root1.data <= root2.data)

h*****n
发帖数: 188
3
wrong.
try a few sample cases.

root2

【在 w***o 的大作中提到】
: 看到很多解法都是in-order遍历两个BST,merge两个array,然后再重构BST,为什么这
: 么啰嗦?
: 不能这样直接merge吗?基本思想就是,比较root1和root2,如果root2大的话,把
: root2断为两个子树,一个的根是root2的左孩子,另一个是root2及其右子树。把root2
: 及其右子树与root1的右子树合并,把root2的左孩子与root1继续合并:
: Node mergeBST(Node root1, Node root2) {
: if (root1 == null || root2 == null)
: return root1 == null? root2 : root1;
:
: if (root1.data <= root2.data)

l*****r
发帖数: 393
4
Wrong, check the BST definition again.

root2

【在 w***o 的大作中提到】
: 看到很多解法都是in-order遍历两个BST,merge两个array,然后再重构BST,为什么这
: 么啰嗦?
: 不能这样直接merge吗?基本思想就是,比较root1和root2,如果root2大的话,把
: root2断为两个子树,一个的根是root2的左孩子,另一个是root2及其右子树。把root2
: 及其右子树与root1的右子树合并,把root2的左孩子与root1继续合并:
: Node mergeBST(Node root1, Node root2) {
: if (root1 == null || root2 == null)
: return root1 == null? root2 : root1;
:
: if (root1.data <= root2.data)

w****x
发帖数: 2483
5
转换成linked list再merge
http://haixiaoyang.wordpress.com/?s=merge+bst
y*****n
发帖数: 243
6
好神奇= =
p*****2
发帖数: 21240
7

太膜拜了。150行code。

【在 w****x 的大作中提到】
: 转换成linked list再merge
: http://haixiaoyang.wordpress.com/?s=merge+bst

d**e
发帖数: 6098
8
post order遍历tree2,逐个逐个insert到tree1也可行吧。

root2

【在 w***o 的大作中提到】
: 看到很多解法都是in-order遍历两个BST,merge两个array,然后再重构BST,为什么这
: 么啰嗦?
: 不能这样直接merge吗?基本思想就是,比较root1和root2,如果root2大的话,把
: root2断为两个子树,一个的根是root2的左孩子,另一个是root2及其右子树。把root2
: 及其右子树与root1的右子树合并,把root2的左孩子与root1继续合并:
: Node mergeBST(Node root1, Node root2) {
: if (root1 == null || root2 == null)
: return root1 == null? root2 : root1;
:
: if (root1.data <= root2.data)

g****y
发帖数: 240
9
你这样解法不对。你不能保证root2左树中的所有node比root1小。

root2

【在 w***o 的大作中提到】
: 看到很多解法都是in-order遍历两个BST,merge两个array,然后再重构BST,为什么这
: 么啰嗦?
: 不能这样直接merge吗?基本思想就是,比较root1和root2,如果root2大的话,把
: root2断为两个子树,一个的根是root2的左孩子,另一个是root2及其右子树。把root2
: 及其右子树与root1的右子树合并,把root2的左孩子与root1继续合并:
: Node mergeBST(Node root1, Node root2) {
: if (root1 == null || root2 == null)
: return root1 == null? root2 : root1;
:
: if (root1.data <= root2.data)

w***o
发帖数: 109
10
当然没有假定root2左树中的所有node比root1小.
所以我才用
root1 = mergeBST(root1, left);
而不是:
root1.left = mergeBST(root1.left, left);

【在 g****y 的大作中提到】
: 你这样解法不对。你不能保证root2左树中的所有node比root1小。
:
: root2

w***o
发帖数: 109
11
我要是面试时候白板写这么多code,肯定无数bug.

【在 w****x 的大作中提到】
: 转换成linked list再merge
: http://haixiaoyang.wordpress.com/?s=merge+bst

n******n
发帖数: 567
12
LZ, 我觉得这么修改一些就对了。
void fun(Node roota, Node rootb){
Node x = findRootaInTreeB(roota, rootb);// O(lgn) time
rotateTreeB(rootB,x);//rotate x as the new root of tree B // O(1) time
//continue your algorithm.....
}
时间还是O(n)
H****s
发帖数: 247
13
这样可以,只是不保证merge后的树balance. 而且时间是O(nlogn)

【在 d**e 的大作中提到】
: post order遍历tree2,逐个逐个insert到tree1也可行吧。
:
: root2

1 (共1页)
进入JobHunting版参与讨论
相关主题
BST 里面的 null 是啥意思?amazon on-site interview
谁有较好的iterative后序遍历binary tree的代码?问个题,怎么比较两个tree是topological same?
一道二叉树的老题How to find the kth biggest number in a BST
一道MS面试题在版上看到的G题
发几道Google面试题(Phone and Onsite)一道二叉树的题
讨论一道两个linked list的题目上一道G家题
MS面试题判断(二叉)树是否镜像对称
请教一个BST找Median的题目Lowest common ancestor of two nodes of Binary Tree
相关话题的讨论汇总
话题: root2话题: root1话题: node话题: bst话题: mergebst