You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

二叉树前序遍历困惑:代码输出与预期不符求助

问题分析与修正

你的前序遍历结果不符合预期,核心原因是二叉树结构构建错误,具体是节点5的挂载位置不对。

错误点定位

你期望的树结构中,节点5是节点2的右子节点,但代码里错误地把它挂到了节点3的右子节点上:

// 错误代码:将5挂载给了节点3(level_1_right)
TreeNode level_2_right = binaryTree.createRightChild(level_1_right, 5);

这导致实际生成的树与你绘制的结构不符,最终前序遍历结果出错。

修正方案

将节点5挂载到节点2(level_1_left)的右子节点即可,修正后的代码片段:

// level 2
TreeNode level_2_left = binaryTree.createLeftChild(level_1_left, 4);
// 修正:将5挂载给节点2(level_1_left)
TreeNode level_2_right = binaryTree.createRightChild(level_1_left, 5);

// level 3
TreeNode level_3_right = binaryTree.createRightChild(level_2_right, 6);

验证结果

修正后,printTree方法的前序遍历(根→左→右)逻辑是正确的,输出序列会变为:

1 : root : 1
2 : left : 2
4 : left : 3
5 : right : 3
6 : right : 4
3 : right : 2

提取值的顺序就是你期望的:1 2 4 5 6 3

完整修正后的BinaryTree.java代码

package sandeep.topics.binaryTrees;

public class BinaryTree {
    static TreeNode root;
    public BinaryTree() {
        
    }
    public BinaryTree(int value) {
        root = new TreeNode(value);
    }
    public static void main(String[] args) {
        BinaryTree binaryTree = new BinaryTree();
        // level 0
        binaryTree.root = new TreeNode(1);
        
        // level 1
        TreeNode level_1_left = binaryTree.createLeftChild(root, 2);
        TreeNode level_1_right = binaryTree.createRightChild(root, 3);
        
        // level 2
        TreeNode level_2_left = binaryTree.createLeftChild(level_1_left, 4);
        // 修正此处的父节点
        TreeNode level_2_right = binaryTree.createRightChild(level_1_left, 5);
        
        // level 3
        TreeNode level_3_right =  binaryTree.createRightChild(level_2_right, 6);
        
        
        printTree(root, "root", 1);
    }
    private static TreeNode createLeftChild(TreeNode root, int value) {
        root.left = new TreeNode(value);
        return root.left;
    }
    
    private static TreeNode createRightChild(TreeNode root, int value) {
        root.right = new TreeNode(value);
        return root.right;
    }
    private static void printTree(TreeNode root, String type, int level) {
        if(root == null) {
            return;
        }
        System.out.println(root.value + " : " + type + " : " + level);
        printTree(root.left, "left", level+1);
        printTree(root.right, "right", level+1);
    }
}

内容的提问来源于stack exchange,提问作者Sandeep Roy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 03:57:41