二叉树前序遍历之递归写法改while循环

import java.util.Stack;

public class MainClass4 {
    public static void main(String[] args) {
        BanaryTree head = init();
        whilePrint(head);
        System.out.println();
        print(head);
    }

    private static void whilePrint(BanaryTree head) {
        // 1. 使用一个栈,先压根节点
        // 2. 先打印根节点,在出栈,出栈的时候压该根的右节点,在压该根左节点
        // 3. 然后执行出栈,出栈的时候执行2 ,栈空的时候中断 ,否者一直出栈

        Stack<BanaryTree> stack = new Stack<>();
        stack.push(head);
        while (!stack.empty()){
            BanaryTree node = stack.pop();
            if (node != null) {
                System.out.print(node.data+"\t");
                stack.push(node.right);
                stack.push(node.left);
            }
        }
    }

    private static void print(BanaryTree head) {
        if (head == null) {
            return;
        }
        System.out.print(head.data+"\t");
        print(head.left);
        print(head.right);
    }

    private static BanaryTree init() {
        BanaryTree head = new BanaryTree("a");
        BanaryTree b = new BanaryTree("b");
        BanaryTree c = new BanaryTree("c");

        BanaryTree e = new BanaryTree("e");
        BanaryTree f = new BanaryTree("f");

        BanaryTree g = new BanaryTree("g");
        BanaryTree h = new BanaryTree("h");

        head.left=b;
        head.right=c;

        b.left=e;
        b.right=f;

        c.left=g;
        c.right=h;
        return head;
    }
}

总结

程序中不能使用递归,因为使用的是系统栈,栈过长会报 stack over flow 错误
posted @ 2021-06-22 18:11  庭有奇树  阅读(178)  评论(0编辑  收藏  举报