欢迎光临散文网 会员登陆 & 注册

Java如何实现递归?

2023-02-17 17:06 作者:YSOcean  | 我要投稿

在Java中,二叉树的后序遍历可以使用递归或迭代的方式进行实现。

  1. 递归实现

递归实现后序遍历的思路是先递归访问当前节点的左子树,再递归访问右子树,最后访问当前节点本身。

下面是一个递归实现的示例代码:

public void postOrderTraversal(TreeNode root) {    if (root != null) {        postOrderTraversal(root.left);        postOrderTraversal(root.right);        System.out.print(root.val + " ");    }}

在上述代码中,postOrderTraversal()方法是一个递归方法,它首先递归访问当前节点的左子树,然后递归访问右子树,最后访问当前节点本身。

  1. 迭代实现

迭代实现后序遍历的思路是使用栈来保存待访问的节点。首先将根节点入栈,然后循环执行以下操作:

  • 从栈顶取出一个节点,如果该节点没有子节点或者其子节点已经被访问过,则访问该节点并将其从栈中弹出;

  • 如果该节点有子节点且子节点尚未被访问过,则依次将其右子节点、左子节点入栈。

下面是一个迭代实现的示例代码:

public void postOrderTraversal(TreeNode root) {

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

    TreeNode lastVisited = null; // 记录上一个访问的节点

    while (root != null || !stack.isEmpty()) {

        // 将左子节点入栈

        if (root != null) {

            stack.push(root);

            root = root.left;

        }

        else {

            TreeNode peekNode = stack.peek();

            // 如果该节点没有右子节点或者右子节点已经被访问过,则访问该节点并将其从栈中弹出

            if (peekNode.right == null || peekNode.right == lastVisited) {

                System.out.print(peekNode.val + " ");

                lastVisited = stack.pop();

            }

            // 否则将右子节点入栈

            else {

                root = peekNode.right;

            }

        }

    }

}

在上述代码中,postOrderTraversal()方法是一个迭代方法,它使用了一个栈来保存待访问的节点,并使用lastVisited变量来记录上一个访问的节点。在循环中,如果当前节点没有左子节点,则从栈顶取出一个节点并访问它;否则将左子节点入栈。如果当前节点没有右子节点或者右子节点已经被访问过,则访问该节点并将其从栈中弹出;否则将右子节点入栈。

Java如何实现递归?的评论 (共 条)

分享到微博请遵守国家法律