W***o 发帖数: 6519 | 1 今天给了一个recursion的解法,然后又让我用stack做,我当时萌了,大家说说stack
咋解? |
f******i 发帖数: 82 | 2 标准dfs遍历,也可以用queue做标准bfs遍历,这些都是基础,建议楼主多做点题
stack
【在 W***o 的大作中提到】 : 今天给了一个recursion的解法,然后又让我用stack做,我当时萌了,大家说说stack : 咋解?
|
p**t 发帖数: 157 | 3 取决于你哪种遍历方法
后序最麻烦 先序最简单
stack
【在 W***o 的大作中提到】 : 今天给了一个recursion的解法,然后又让我用stack做,我当时萌了,大家说说stack : 咋解?
|
p**t 发帖数: 157 | 4 不会用栈遍历二叉树的 你让他用栈做DFS不是更不会。。。
【在 f******i 的大作中提到】 : 标准dfs遍历,也可以用queue做标准bfs遍历,这些都是基础,建议楼主多做点题 : : stack
|
p**t 发帖数: 157 | 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 : 咋解?
|
w****k 发帖数: 755 | 6 后序用两个堆栈来解那是相当容易,不到10行代码。
【在 p**t 的大作中提到】 : 取决于你哪种遍历方法 : 后序最麻烦 先序最简单 : : stack
|
w****a 发帖数: 710 | 7 后续可以当先序做,push的时候先左后右,最后reverse一下,也简单 |
g*******0 发帖数: 20 | 8 递归不就是用栈实现的么,把传入递归函数的参数压栈即可。
stack
【在 W***o 的大作中提到】 : 今天给了一个recursion的解法,然后又让我用stack做,我当时萌了,大家说说stack : 咋解?
|
W***o 发帖数: 6519 | 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();
|
k*******a 发帖数: 433 | 10 曾经有个牛人告诉我,只要可以递归的,都可以用栈实现 |
|
|
j****y 发帖数: 684 | 11 bt的人家直接考非stack,非recursion,且O(1)的
【在 k*******a 的大作中提到】 : 曾经有个牛人告诉我,只要可以递归的,都可以用栈实现
|
p**t 发帖数: 157 | 12 通常都只允许用一个栈来解决吧- -
【在 w****k 的大作中提到】 : 后序用两个堆栈来解那是相当容易,不到10行代码。
|
p**t 发帖数: 157 | 13 因为递归的实际实现就是把前一个function call入栈 然后处理调用的新call。。
【在 k*******a 的大作中提到】 : 曾经有个牛人告诉我,只要可以递归的,都可以用栈实现
|
d****n 发帖数: 233 | |
p**t 发帖数: 157 | |
m*********1 发帖数: 204 | 16 请问这个怎么写啊
【在 w****a 的大作中提到】 : 后续可以当先序做,push的时候先左后右,最后reverse一下,也简单
|
p**t 发帖数: 157 | 17 先序会写吧?
先访问右子树的先序会不会写?
先访问左子树的后序遍历
就相当于先访问右子树的先序的结果做一个反序。。。
当然面试的时候我不建议你这么做 因为这显然不是考你的人想要的答案
到时候人家要你不反转的做你还是得老老实实的写。。。
【在 m*********1 的大作中提到】 : 请问这个怎么写啊
|