由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 一道二叉树的老题
相关主题
二叉树如何判断一个节点是不是在另外两个节点的path上。。。。好像是个老题了。。求解?A家一道onsite题
[讨论] 算法超级大总结-- 面试中二叉树中常常考的题目,欢迎大家进来补充请教一个BST找Median的题目
MS面试题amazon on-site interview
How to find the kth biggest number in a BST一道G家题目的思路
求教一道老题求问把二叉树的recursive遍历改为stack实现的思路
一道MS面试题请教一道g算法题
问一道二叉树遍历的问题? 谢谢!一个老题binary tree找 lowest common ancestor 的code (请教
如何随机找二叉树中的任意节点?想到一道老题
相关话题的讨论汇总
话题: bst话题: root话题: node话题: int话题: left
进入JobHunting版参与讨论
1 (共1页)
P*******b
发帖数: 1001
1
记得问过,不过没有搞定。
给一个bst,用递归求第kth节点。要求返回node
不能用额外的空间。bst是普通的bst,node没有子节
点的数目。
thanks
l*****a
发帖数: 14598
2
递归的cost算额外空间吗?
不算的话,直接中根遍历/计数就可以了吧。

【在 P*******b 的大作中提到】
: 记得问过,不过没有搞定。
: 给一个bst,用递归求第kth节点。要求返回node
: 不能用额外的空间。bst是普通的bst,node没有子节
: 点的数目。
: thanks

s*****n
发帖数: 5488
3
先序遍历。
在第一次left == null 时,开始计数。到k时输出。

【在 P*******b 的大作中提到】
: 记得问过,不过没有搞定。
: 给一个bst,用递归求第kth节点。要求返回node
: 不能用额外的空间。bst是普通的bst,node没有子节
: 点的数目。
: thanks

s*****n
发帖数: 5488
4
中序。

【在 s*****n 的大作中提到】
: 先序遍历。
: 在第一次left == null 时,开始计数。到k时输出。

s*****n
发帖数: 5488
5
#include
use namespace std;
void k-bst(Node * root, int k)
{
static int i = 0;
if ( root )
{
K-BST(root->left, k);
if (++i == k)
cout << root->data;
k-bst(root->right,k);
}
}

【在 s*****n 的大作中提到】
: 中序。
P*******b
发帖数: 1001
6
thanks
这个题要求返回node,不然显得太简单。

【在 P*******b 的大作中提到】
: 记得问过,不过没有搞定。
: 给一个bst,用递归求第kth节点。要求返回node
: 不能用额外的空间。bst是普通的bst,node没有子节
: 点的数目。
: thanks

l*****a
发帖数: 14598
7
i can't get u
then just return node when count==k

【在 P*******b 的大作中提到】
: thanks
: 这个题要求返回node,不然显得太简单。

P*******b
发帖数: 1001
8
呵呵,你试试就知道了

【在 l*****a 的大作中提到】
: i can't get u
: then just return node when count==k

l*****a
发帖数: 14598
9
说说吧
别卖关子了。
有什么区别?

【在 P*******b 的大作中提到】
: 呵呵,你试试就知道了
P*******b
发帖数: 1001
10
晕,我没有卖关子。
可能是我自己太笨,写不出来。
假设node *p是找到的节点,
if(k == 0) return p在递归的时候只能退到上一级。
除非用额外参数,我是没有什么好办法。

【在 l*****a 的大作中提到】
: 说说吧
: 别卖关子了。
: 有什么区别?

d**e
发帖数: 6098
11
我没测试,改写独孤九剑同学的
Node * k-bst(Node * root, int k)
{
static int i = 0;
Node * p = 0;
if ( root )
{
if((p = K-BST(root->left, k)) != 0)
;
else if (++i == k)
p = root;
else
p = k-bst(root->right,k);
}
return p;
}

【在 P*******b 的大作中提到】
: 晕,我没有卖关子。
: 可能是我自己太笨,写不出来。
: 假设node *p是找到的节点,
: if(k == 0) return p在递归的时候只能退到上一级。
: 除非用额外参数,我是没有什么好办法。

c*******t
发帖数: 1095
12
递归有问题的话,不能回溯么?
P********l
发帖数: 452
13
我也没测,但是done同学的方法肯定不对。
1。使用了静态变量i,不严格。如何指望在第一层调用时i==0?
2。函数返回的当前层的局部变量。几乎总是返回0。正确的情况才是特例。

【在 d**e 的大作中提到】
: 我没测试,改写独孤九剑同学的
: Node * k-bst(Node * root, int k)
: {
: static int i = 0;
: Node * p = 0;
: if ( root )
: {
: if((p = K-BST(root->left, k)) != 0)
: ;
: else if (++i == k)

b********h
发帖数: 119
14
似乎没啥问题啊。

函数的局部静态变量在第一次调用的时候初始化。
一旦找到kth节点之后,它就会被不断的返回到上层的调用,直到根节点,结束函数的
执行。

【在 P********l 的大作中提到】
: 我也没测,但是done同学的方法肯定不对。
: 1。使用了静态变量i,不严格。如何指望在第一层调用时i==0?
: 2。函数返回的当前层的局部变量。几乎总是返回0。正确的情况才是特例。

1 (共1页)
进入JobHunting版参与讨论
相关主题
想到一道老题求教一道老题
麻烦谁贴一个bug free的BST next node一道MS面试题
L家这题咋搞,巨变态问一道二叉树遍历的问题? 谢谢!
请问一个关于递归算法的问题。如何随机找二叉树中的任意节点?
二叉树如何判断一个节点是不是在另外两个节点的path上。。。。好像是个老题了。。求解?A家一道onsite题
[讨论] 算法超级大总结-- 面试中二叉树中常常考的题目,欢迎大家进来补充请教一个BST找Median的题目
MS面试题amazon on-site interview
How to find the kth biggest number in a BST一道G家题目的思路
相关话题的讨论汇总
话题: bst话题: root话题: node话题: int话题: left