Leetcode: Binary Tree Preorder Traversal

来源:互联网 发布:扫描仪软件怎么使用 编辑:程序博客网 时间:2024/06/16 19:47

Given a binary tree, return the preorder traversal of its nodes' values.

For example:
Given binary tree {1,#,2,3},

   1    \     2    /   3

return [1,2,3].

Note: Recursive solution is trivial, could you do it iteratively?


Solution with recursion:

/** * Definition for binary tree * public class TreeNode { *     int val; *     TreeNode left; *     TreeNode right; *     TreeNode(int x) { val = x; } * } */public class Solution {    public ArrayList<Integer> preorderTraversal(TreeNode root) {        ArrayList<Integer> res = new ArrayList<Integer>();        tranverse(root, res);        return res;    }        private void tranverse(TreeNode root, ArrayList<Integer> res) {        if (root == null) {            return;        }                    res.add(root.val);        tranverse(root.left, res);        tranverse(root.right, res);    }}

Solution without recursion: Use stack to store nodes, with right node coming before left node, so that left node can be taken out earlier than right node.

/** * Definition for binary tree * public class TreeNode { *     int val; *     TreeNode left; *     TreeNode right; *     TreeNode(int x) { val = x; } * } */public class Solution {    public ArrayList<Integer> preorderTraversal(TreeNode root) {        ArrayList<Integer> res = new ArrayList<Integer>();        if (root == null) {            return res;        }                   Stack<TreeNode> stack = new Stack<TreeNode>();        stack.push(root);        while(!stack.empty()) {            TreeNode node = stack.pop();            res.add(node.val);            if (node.right != null) {                stack.push(node.right);            }            if (node.left != null) {                stack.push(node.left);            }        }        return res;    }}


0 0
原创粉丝点击