[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; } }