非递归二叉树操作.md

来源:互联网 发布:seo教程视频 编辑:程序博客网 时间:2024/06/09 17:49

使用单栈进行二叉树非递归操作。
具体的Java版本代码为:

protected static void nonIterativePreorder(Node p) {        Stack<Node> stack = new Stack<Node>();        Node node = p;        while (node != null || stack.size() > 0) {            while (node != null) {            visit(node);                stack.push(node);                node = node.getLeft();            }            if (stack.size() > 0) {             node = stack.pop();                node = node.getRight();            }        }    }  protected static void noniterativeInorder(Node p) {        Stack<Node> stack = new Stack<Node>();        Node node = p;        while (node != null || stack.size() > 0) {            while (node != null) {                stack.push(node);                node = node.getLeft();            }            if (stack.size() > 0) {                node = stack.pop();                visit(node);            node = node.getRight();            }        }    } protected static void noniterativePostorder(Node p) {        Stack<Node> stack = new Stack<Node>();        Node node = p, prev = p;        while (node != null || stack.size() > 0) {            while (node != null) {                stack.push(node);                node = node.getLeft();            }            if (stack.size() > 0) {                Node temp = stack.peek().getRight();                if (temp == null || temp == prev) {                    node = stack.pop();                    visit(node);                    prev = node;                    node = null;                } else {                    node = temp;                }            }    }    }
原创粉丝点击