Redian新闻
>
遍历二叉树除了recursion还有啥好办法?
avatar
遍历二叉树除了recursion还有啥好办法?# JobHunting - 待字闺中
W*o
1
今天给了一个recursion的解法,然后又让我用stack做,我当时萌了,大家说说stack
咋解?
avatar
f*i
2
标准dfs遍历,也可以用queue做标准bfs遍历,这些都是基础,建议楼主多做点题

stack

【在 W***o 的大作中提到】
: 今天给了一个recursion的解法,然后又让我用stack做,我当时萌了,大家说说stack
: 咋解?

avatar
p*t
3
取决于你哪种遍历方法
后序最麻烦 先序最简单

stack

【在 W***o 的大作中提到】
: 今天给了一个recursion的解法,然后又让我用stack做,我当时萌了,大家说说stack
: 咋解?

avatar
p*t
4
不会用栈遍历二叉树的 你让他用栈做DFS不是更不会。。。

【在 f******i 的大作中提到】
: 标准dfs遍历,也可以用queue做标准bfs遍历,这些都是基础,建议楼主多做点题
:
: stack

avatar
p*t
5
举个先序的例子给你吧
while(current != NULL || !stack.empty()){
if(current != NULL){
stack.push(current);
visit(current);
current = current -> left;
}
else{
current = stack.top();
stack.pop();
current = current -> right;
}
}
中序的其实很类似 访问current的时间变一下而已

stack

【在 W***o 的大作中提到】
: 今天给了一个recursion的解法,然后又让我用stack做,我当时萌了,大家说说stack
: 咋解?

avatar
w*k
6
后序用两个堆栈来解那是相当容易,不到10行代码。

【在 p**t 的大作中提到】
: 取决于你哪种遍历方法
: 后序最麻烦 先序最简单
:
: stack

avatar
w*a
7
后续可以当先序做,push的时候先左后右,最后reverse一下,也简单
avatar
g*0
8
递归不就是用栈实现的么,把传入递归函数的参数压栈即可。

stack

【在 W***o 的大作中提到】
: 今天给了一个recursion的解法,然后又让我用stack做,我当时萌了,大家说说stack
: 咋解?

avatar
W*o
9
谢谢,
我去之前是毫无准备,以为不会考算法;就这recursive解法我还是吃老本的,呵呵

【在 p**t 的大作中提到】
: 举个先序的例子给你吧
: while(current != NULL || !stack.empty()){
: if(current != NULL){
: stack.push(current);
: visit(current);
: current = current -> left;
: }
: else{
: current = stack.top();
: stack.pop();

avatar
k*a
10
曾经有个牛人告诉我,只要可以递归的,都可以用栈实现
avatar
j*y
11
bt的人家直接考非stack,非recursion,且O(1)的

【在 k*******a 的大作中提到】
: 曾经有个牛人告诉我,只要可以递归的,都可以用栈实现
avatar
p*t
12
通常都只允许用一个栈来解决吧- -

【在 w****k 的大作中提到】
: 后序用两个堆栈来解那是相当容易,不到10行代码。
avatar
p*t
13
因为递归的实际实现就是把前一个function call入栈 然后处理调用的新call。。

【在 k*******a 的大作中提到】
: 曾经有个牛人告诉我,只要可以递归的,都可以用栈实现
avatar
m*1
16
请问这个怎么写啊

【在 w****a 的大作中提到】
: 后续可以当先序做,push的时候先左后右,最后reverse一下,也简单
avatar
p*t
17
先序会写吧?
先访问右子树的先序会不会写?
先访问左子树的后序遍历
就相当于先访问右子树的先序的结果做一个反序。。。
当然面试的时候我不建议你这么做 因为这显然不是考你的人想要的答案
到时候人家要你不反转的做你还是得老老实实的写。。。

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