Java二叉树的先序遍历

LeetCode

思想

  • 输出顺序
    根>左>右

算法(非递归)

  • 使用栈来实现
    public ArrayList<Integer> preorderTraversal(TreeNode root) {
    
    
        //结果的存储
        ArrayList<Integer> result = new ArrayList<>();
        if (root == null) return result;
        //使用栈来实现
        Stack<TreeNode> stack = new Stack<>();
        stack.push(root);
        //循环取数据,直到栈为空
        while (!stack.isEmpty()) {
    
    
            TreeNode treeNode = stack.pop();
            result.add(treeNode.val);
            //先右结点入栈
            if (treeNode.right != null) stack.push(treeNode.right);
            //再左节点入栈
            if (treeNode.left != null) stack.push(treeNode.left);
        }
        return result;
    }

算法(递归)

    public ArrayList<Integer> preorderTraversal(TreeNode root) {
    
    
        //结果存储
        ArrayList<Integer> result = new ArrayList<>();
        //判空
        if (root == null) return result;
        //先根遍历,先存储根结点
        result.add(root.val);
        //递归,左子树
        result.addAll(preorderTraversal(root.left));
        //递归,右子树
        result.addAll(preorderTraversal(root.right));
        return result;
    }

猜你喜欢

转载自blog.csdn.net/yu540135101/article/details/114032853