由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - Print all the paths from root to every leaf 的 iterative
相关主题
问tree的iterative traversal讨论一道leetcode上面的题
如何判断两个BST的元素是一样的?Tree的traversal也分BFS和DFS?
我今年的第一次面试,恶心坏了感觉Binary Tree Postorder Traversal的iterative是三种traversal中最难的
攒人品,amazon一面经历有没有面试被问到Binary Tree Postorder Traversal Morris Traversal的呢?
leetcode中的binary tree level order traverse II总是有run t帮我看一下5行代码
渣渣cs本科半应届如何找工作一个小面筋
[leetcode] Binary Tree from Inorder & Postorder Traversal问几个有关Binary tree的题
Construct Binary Tree from Inorder and Postorder Traversal两道题目
相关话题的讨论汇总
话题: tmp话题: cur话题: treenode话题: root话题: path
进入JobHunting版参与讨论
1 (共1页)
h**o
发帖数: 548
1
象这种题目的iterative解法一般有什么套路那?
好像三种树(pre, in, postorder)的iterative traversal法都套不上啊?
m**********g
发帖数: 153
2
把pre-order iterative traversal 改造了一下, 添加了 vector
nodePath; 作为path stack. 楼主看看是不是可以?
class Solution {
public:
void preorderTraversal(TreeNode *root) {
stack st;
vector nodePath;

if(root == NULL)
return;

st.push(root);

while(st.size()) {
TreeNode *tmp = st.top();

st.pop();

//leaf node, print the path from root to leaf
if(!tmp->right && !tmp->left) {
for(int i=0; i cout<< nodePath[i].val;
cout<< tmp->val< continue;
}

//clean the path backwards until parent is seen or path is empty.
while(!nodePath.empty()) {
TreeNode *parent = nodePath.back();
if(tmp == parent->left || tmp == parent->right)
break;
nodePath.pop_back();
}

//save this node in the path.
nodePath.push_back(tmp);

if(tmp->right)
st.push(tmp->right);
if(tmp->left)
st.push(tmp->left);
}
}
};

【在 h**o 的大作中提到】
: 象这种题目的iterative解法一般有什么套路那?
: 好像三种树(pre, in, postorder)的iterative traversal法都套不上啊?

w*******e
发帖数: 285
3
用bfs level print同时记住每个node的parent,看到leaf node就向上一直找到root
//none re-cursive level order, BFS
void levelorder(treenode* root){
if (root == nullptr) return;
map parent;
parent[root] = nullptr;
queue q;
q.push(root);
while (!q.empty()) {
auto cur = q.front(); q.pop();
if (cur->left) {
parent[cur->left] = cur;
q.push(cur->left);
}
if (cur->right) {
parent[cur->right] = cur;
q.push(cur->right);
}
//leaf node, print the path
if (!cur->left && !cur->right)
{
while(cur)
{
printf(cur->val);
cur = parent[cur];
}
}
}
}

【在 h**o 的大作中提到】
: 象这种题目的iterative解法一般有什么套路那?
: 好像三种树(pre, in, postorder)的iterative traversal法都套不上啊?

h**o
发帖数: 548
4
这个真好懂. 就是要费(n)空间

【在 w*******e 的大作中提到】
: 用bfs level print同时记住每个node的parent,看到leaf node就向上一直找到root
: //none re-cursive level order, BFS
: void levelorder(treenode* root){
: if (root == nullptr) return;
: map parent;
: parent[root] = nullptr;
: queue q;
: q.push(root);
: while (!q.empty()) {
: auto cur = q.front(); q.pop();

h**o
发帖数: 548
5
原来是这样.自己造不出这个path stack来.学习了.

把pre-order iterative traversal 改造了一下, 添加了 vector
nodePath; 作为path stack. 楼主看看是不是可以?
class Solution {
public:
void preorderTraversal(TreeNode *root) {
stack st;
vector nodePath;

if(root == NULL)
return;

st.push(root);

while(st.size()) {
TreeNode *tmp = st.top();

st.pop();

//leaf node, print the path from root to leaf
if(!tmp->right && !tmp->left) {
for(int i=0; i cout<< nodePath[i].val;
cout<< tmp->val< continue;
}

//clean the path backwards until parent is seen or path is empty.
while(!nodePath.empty()) {
TreeNode *parent = nodePath.back();
if(tmp == parent->left || tmp == parent->right)
break;
nodePath.pop_back();
}

//save this node in the path.
nodePath.push_back(tmp);

if(tmp->right)
st.push(tmp->right);
if(tmp->left)
st.push(tmp->left);
}
}
};

【在 m**********g 的大作中提到】
: 把pre-order iterative traversal 改造了一下, 添加了 vector
: nodePath; 作为path stack. 楼主看看是不是可以?
: class Solution {
: public:
: void preorderTraversal(TreeNode *root) {
: stack st;
: vector nodePath;
:
: if(root == NULL)
: return;

b*********s
发帖数: 115
6
preorder traversal, path存着从root到cur的所有点,如果cur是leaf则打印path
def printAllPaths(self, root):
stack = []
cur = root
path = []
while cur or stack:
if cur:
stack.append(cur)
path.append(cur)
if not cur.left and not cur.right:
print [node.val for node in path]
cur = cur.left
else:
cur = stack.pop()
while path[-1] is not cur:
path.pop()
cur = cur.right
1 (共1页)
进入JobHunting版参与讨论
相关主题
两道题目leetcode中的binary tree level order traverse II总是有run t
大牛帮我看看这哪错了? iterative inorder traversal渣渣cs本科半应届如何找工作
Print root to leaf paths without using recursion[leetcode] Binary Tree from Inorder & Postorder Traversal
狗狗家onsite面经Construct Binary Tree from Inorder and Postorder Traversal
问tree的iterative traversal讨论一道leetcode上面的题
如何判断两个BST的元素是一样的?Tree的traversal也分BFS和DFS?
我今年的第一次面试,恶心坏了感觉Binary Tree Postorder Traversal的iterative是三种traversal中最难的
攒人品,amazon一面经历有没有面试被问到Binary Tree Postorder Traversal Morris Traversal的呢?
相关话题的讨论汇总
话题: tmp话题: cur话题: treenode话题: root话题: path