//leaf node, print the path from root to leaf if(!tmp->right && !tmp->left) { for(int i=0; icout<< 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);
//leaf node, print the path from root to leaf if(!tmp->right && !tmp->left) { for(int i=0; icout<< 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);
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