二叉树非递归遍历

来源:互联网 发布:star算法 opencv3 编辑:程序博客网 时间:2024/06/05 07:13

1、先序遍历

访问顺序:根节点->左孩子-> 右孩子

public void iPreOrder(TreeNode root) {    TreeNode p = root;    LinkedList<TreeNode> stack = new LinkedList<>();    if (p != null) {        stack.push(p);// 根节点入栈        while (!stack.isEmpty()) {            p = stack.pop(); // 根节点出栈            visit(p);// 访问根节点            if (p.right != null)                stack.push(p.right);// 右孩子入栈            if (p.left != null)                stack.push(p.left);// 左孩子入栈        }    }}

2、中序遍历

访问顺序:左孩子->根节点->右孩子

public void iMidOrder(TreeNode tn) {    TreeNode p = tn;    LinkedList<TreeNode> stack = new LinkedList<>();    while (p != null || !stack.isEmpty()) {        while (p != null) {            stack.push(p);            p = p.left;// 访问至最左边,直至为空        }        if (!stack.isEmpty()) {            p = stack.pop(); // 最左元素出栈            visit(p);// 访问当前元素            p = p.right; // 指向当前元素的右孩子        }    }}
原创粉丝点击