1. 程式人生 > 實用技巧 >二叉樹的遍歷

二叉樹的遍歷

//144. Binary Tree Preorder Traversal (Medium)
    public List<Integer> preorderTraversal(TreeNode root){
        List<Integer> ret = new ArrayList<Integer>();
        if(root==null){
            return ret;
        }
        Stack<TreeNode> stack = new Stack<>();
        stack.push(root);
        
while(!stack.isEmpty()){ TreeNode node = stack.pop(); ret.add(node.value); if(node.right!=null){ stack.add(node.right); } if(node.left!=null){ stack.add(node.right); } } return ret; }
//145. Binary Tree Postorder Traversal (Medium) //前序遍歷為 root -> left -> right,後序遍歷為 left -> right -> root。可以修改前序遍歷成為 root -> right -> left,那麼這個順序就和後序遍歷正好相反。 public List<Integer> postorderTraversal(TreeNode root){ List<Integer> ret = new ArrayList<Integer>();
if(root==null){ return ret; } Stack<TreeNode> stack = new Stack<TreeNode>(); stack.push(root); while(!stack.isEmpty()){ TreeNode node = stack.pop(); ret.add(node.value); if(root.left!=null){ stack.push(node.left); } if(root.right!=null){ stack.push(node.right); } } Collections.reverse(ret); return ret; } //94. Binary Tree Inorder Traversal (Medium) public List<Integer> inorderTraversal(TreeNode root){ List<Integer> ret = new ArrayList<Integer>(); Stack<TreeNode> stack = new Stack<TreeNode>(); TreeNode curr = root; while(curr!=null || !stack.isEmpty()){ while(curr!=null){ stack.push(curr); curr = curr.left; } curr = stack.pop(); ret.add(curr.value); curr = curr.right; } return ret; }