前序Preorder: 先访问根节点,然后访问左子树,最后访问右子树。子树递归同理 中序Inorder: 先访问左子树,然后访问根节点,最后访问右子树. 后序Postorder:先访问左子树,然后访问右子树,最后访问根节点. class Node: def __init__(self, key): self.left = None self.right = None self.val = key def
Postorder与Inorder很相似,但是比Inorder复杂的地方是如何判断该节点的左右子树都已经访问过了,按照Inorder的写法左子树还是先被访问,没有问题,但是访问完左子树后不能直接访问当前节点,要判断当前节点的右子树是否已经被访问,如果没有访问则应该继续去访问右子树,最后再访问当前节点 1vector<int> postorderTraversal(T...
65publicstaticvoidinOrder(TreeNode root){66if(root ==null)return;67inOrder(root.left);68visit(root);69inOrder(root.right);70}7172publicstaticvoidinOrder2(TreeNode root){73if(root ==null)return;74Stack<TreeNode> stack =newStack<TreeNode>();75while(!stack.empty() || root !=null){76...
for inorder and level order tranvese, we needs to use a cur pointer on root but for pre and post order, we only needs to push the root. Core statement: while statement: preorder: while stack is not empty: pop() and added cur.val, stack.pop(cur.right) stack.pop(cur.left) postor...
Binary Tree Postorder Traversal 题目链接 题目要求: Given a binary tree, return thepostordertraversal of its nodes' values. For example: Given binary tree{1,#,2,3}, 1 \ 2 / 3 return[3,2,1]. Note: Recursive solution is trivial, could you do it iteratively?
方法一:和Preorder方法一类似,直接做,但是需要一个计数器,第二次出栈的时候才可以输出。 classSolution {public: vector<int> inorderTraversal(TreeNode*root) { vector<int>res;if(root==NULL)returnres; unordered_map<TreeNode *,int> hash;//default value is 0;stack<TreeNode *>s({root});while(!
144. Binary Tree Preorder Traversal 94. Binary Tree Inorder Traversal 145. Binary Tree Postorder Traversal 前序排列 :根-左-右 中序排列: 左-根-右 后序排列:左-右-根 参考答案 1 // PreOrder 2 /** 3 * Definition for a binary tree node. 4 * struct TreeNode { 5 * int val; 6 ...
public void preorderTraversal(List<Integer> result, TreeNode root){ if(root==null) return; result.add(root.val); preorderTraversal(result, root.left); preorderTraversal(result, root.right); } public void postorderTraversal(List<Integer> result, TreeNode root){ ...
pre[0]; int i = mapIndex[rootVal] - offset; Node* root = new Node(rootVal); root->left = buildInorderPreorder(in, pre+1, i, offset); root->right = buildInorderPreorder(in+i+1, pre+i+1, n-i-1, offset+i+1); return root; } Node* buildInorderPostorder(int in[], int ...
preorder, inorder, postorder are based on DFS level order are based on BFS. the iterate way to tranverse: because pre/in/post are based on DFS, so they use stack(linkedlist) but level order uses queue(linkedlist) for inorder and level order tranvese, we needs to use a cur pointer ...