欢迎访问宙启技术站
智能推送

Java中使用迭代方式遍历二叉树的函数实现

发布时间:2023-07-01 04:21:25

在Java中,可以使用迭代的方式遍历二叉树。迭代遍历二叉树的方法有三种:前序遍历、中序遍历和后序遍历。

1. 前序遍历(Pre-order traversal)

前序遍历是指先访问根节点,然后遍历左子树,最后遍历右子树。

可以使用栈来实现前序遍历。首先将根节点入栈,然后开始循环,直到栈为空。在循环中,先弹出栈顶节点,访问该节点的值,然后将其右子节点入栈(如果存在),最后将其左子节点入栈(如果存在)。

public void preorderTraversal(TreeNode root) {
    if (root == null) {
        return;
    }

    Stack<TreeNode> stack = new Stack<>();
    stack.push(root);

    while(!stack.isEmpty()) {
        TreeNode node = stack.pop();
        System.out.print(node.val + " ");

        if (node.right != null) {
            stack.push(node.right);
        }
        
        if (node.left != null) {
            stack.push(node.left);
        }
    }
}

2. 中序遍历(In-order traversal)

中序遍历是指先遍历左子树,然后访问根节点,最后遍历右子树。

可以使用栈来实现中序遍历。首先将根节点入栈,然后开始循环,直到栈为空。在循环中,如果当前节点不为空,将其左子节点入栈,然后将当前节点置为其左子节点;如果当前节点为空,弹出栈顶节点,访问该节点的值,然后将当前节点置为其右子节点。

public void inorderTraversal(TreeNode root) {
    if (root == null) {
        return;
    }

    Stack<TreeNode> stack = new Stack<>();
    TreeNode node = root;

    while(node != null || !stack.isEmpty()) {
        while (node != null) {
            stack.push(node);
            node = node.left;
        }
        
        node = stack.pop();
        System.out.print(node.val + " ");
        node = node.right;
    }
}

3. 后序遍历(Post-order traversal)

后序遍历是指先遍历左子树,然后遍历右子树,最后访问根节点。

可以使用栈来实现后序遍历。使用两个栈,一个栈用于存储遍历顺序的节点,一个栈用于存储输出顺序的节点。首先将根节点入栈1,然后开始循环,直到栈1为空。在循环中,从栈1中弹出节点,将其压入栈2,然后将其左子节点和右子节点依次入栈1。最后,从栈2中依次弹出节点,访问它们的值。

public void postorderTraversal(TreeNode root) {
    if (root == null) {
        return;
    }

    Stack<TreeNode> stack1 = new Stack<>();
    Stack<TreeNode> stack2 = new Stack<>();
    
    stack1.push(root);

    while(!stack1.isEmpty()) {
        TreeNode node = stack1.pop();
        stack2.push(node);

        if (node.left != null) {
            stack1.push(node.left);
        }
        
        if (node.right != null) {
            stack1.push(node.right);
        }
    }
    
    while(!stack2.isEmpty()) {
        TreeNode node = stack2.pop();
        System.out.print(node.val + " ");
    }
}

以上就是使用迭代方式遍历二叉树的函数实现,分别是前序遍历、中序遍历和后序遍历。可以根据具体需求选择对应的遍历方式。