二叉树前序遍历困惑:代码输出与预期不符求助
问题分析与修正
你的前序遍历结果不符合预期,核心原因是二叉树结构构建错误,具体是节点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
相关产品推荐
相关产品推荐

