[LeetCode] 144. Binary Tree Preorder Traversal Java

题目:

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].

题意及分析:给出一个二叉树,求先序遍历的结果。使用递归很简单,但是要求不用递归,所以我们可以使用一个stack来实现非递归方法,维护一个stack,保存从根节点一直到最左边的叶节点上的点,同时将这些点的值添加进结果集,达到叶节点后需要查看该节点是否有兄弟节点(即该点的父节点是否有右子节点),若有则对该兄弟节点同样遍历到最左叶节点,然后返回上一层,以此类推。具体实现看代码:

/**
 * Definition for a binary tree node.
 * 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> res = new ArrayList<>();
		Stack<TreeNode> stack=new Stack<>();
		
		while(root!=null||!stack.isEmpty()){
			if(root!=null){
				stack.push(root);
				res.add(root.val);
				root = root.left;
			}else{
				root=stack.pop();
				root=root.right;
			}
		}
		return res;
    }
}

 

  

 

 

posted @ 2017-06-15 14:53  荒野第一快递员  阅读(157)  评论(0编辑  收藏  举报