二叉树非递归先序遍历

来源:互联网 发布:淘宝上的伟哥药能买吗 编辑:程序博客网 时间:2024/05/19 14:37

二叉树先序遍历比较容易实现,以下图为例,首先设置一个栈结构,如果栈不空,或者当前节点不为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));//}}


0 0