二叉树先序遍历比较容易实现,以下图为例,首先设置一个栈结构,如果栈不空,或者当前节点不为null,则循环继续:
1、如果当前节点不为null,则沿该节点一直往左走,直到该节点的最左子节点,在寻找的过程中不断访问节点(先序),如A -> B -> D;
2、如果当前节点为null,但是栈不空,则出栈,因为出栈后的节点,和其左子树均已被访问,所以接下来找其右子树。
Java实现的先序遍历代码如下,主要是preorderTraversal方法:
/**
* Definition for binary tree
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
ArrayList<Integer> list = new ArrayList<Integer>();
Stack<TreeNode> stack = new Stack<TreeNode>();
public List<Integer> preorderTraversal(TreeNode root) {
if(root==null){
return list;
}
TreeNode temp = null;
while(!stack.isEmpty() || root!=null){
while(root != null){
list.add(root.val);
stack.push(root);
root = root.left;
}
temp = stack.pop();
System.out.println(temp.val);
root = temp.right;
}
return list;
}
// public static void main(String[] args) {
// TreeNode root = TreeNode.getInstance();
// Solution s = new Solution();
// System.out.println(s.preorderTraversal(root));
// }
}