描述:
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?
思路:
具体思路和中序遍历是一致的,只是访问结点的值的时机不同罢了,具体思路参见:http://blog.csdn.net/mnmlist/article/details/44312315
代码:
/** * 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>list=new ArrayList<Integer>(); if(root==null) return list; Stack<TreeNode>st=new Stack<TreeNode>(); st.push(root); TreeNode top=null; list.add(root.val); while(!st.empty()) { top=st.peek(); while(top.left!=null) { st.push(top.left); list.add(top.left.val); top=top.left; } while(top.right==null) { st.pop(); if(!st.empty()) top=st.peek(); else break; } if(!st.empty()) { st.pop(); st.push(top.right); list.add(top.right.val); } } return list; } }
结果:
时间: 2024-11-06 12:42:00