Binary Tree Preorder Traversal (Java)

来源:互联网 发布:淘宝免费货源怎么找 编辑:程序博客网 时间:2024/06/15 13:46

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?

这道题是让用非递归方法解决前序遍历问题

Source 递归

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


Test

    public static void main(String[] args){    TreeNode a = new TreeNode(1);    a.left = new TreeNode(2);    a.right = new TreeNode(3);    a.left.left = new TreeNode(4);    a.left.right = new TreeNode(5);    a.right.left = new TreeNode(6);    a.right.right = new TreeNode(7);        System.out.println(new Solution().preorderTraversal(a));      }


Source非递归

/** * Definition for binary tree * public class TreeNode { *     int val; *     TreeNode left; *     TreeNode right; *     TreeNode(int x) { val = x; } * } */public class Solution {    public List<Integer> preorderTraversal(TreeNode root) {    List<Integer> st = new ArrayList<Integer>();    if(root == null) return st;    Stack<TreeNode> l = new Stack<TreeNode>();    l.add(root);        while(!l.isEmpty()){//跟层序遍历那道题差不多,只不过这里用的是栈    TreeNode a = l.pop();    st.add(a.val);        if(a.right != null){//由于用栈而不是队列,所以要先把右子树压进栈    l.push(a.right);    }    if(a.left != null){    l.push(a.left);    }    }    return st;        }}


Source非递归2

/** * Definition for binary tree * public class TreeNode { *     int val; *     TreeNode left; *     TreeNode right; *     TreeNode(int x) { val = x; } * } */public class Solution {    public List<Integer> preorderTraversal(TreeNode root) {    List<Integer> st = new ArrayList<Integer>();    if(root == null) return st;    Stack<TreeNode> l = new Stack<TreeNode>();            while(!l.isEmpty() || root != null ){  //注意判断信息不止是l不为空    if(root != null){    l.push(root);    st.add(root.val);    root = root.left;    }    else{    TreeNode a = l.pop();          root = a.right;    }    }        return st;    }}


0 0