返回信息流这样写好像有问题,root左右指针总是null
这是一条镜像帖。来源:北邮人论坛 / java / #31062同步于 2014/7/16
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
java 写二叉树插入
wabyrlt
2014/7/16镜像同步5 回复
订阅后,新回复会通过你的通知中心匿名送达。
5 条回复
感觉是对的吧,你有没有验证下?
我这样写试了下是对的:
Node:
1 class Node {
2 int data;
3 Node left;
4 Node right;
5
6 public Node() {
7 this(0);
8 }
9
10 public Node(int data) {
11 this(data, null, null);
12 }
13
14 public Node(int data, Node left, Node right) {
15 this.data = data;
16 this.left = left;
17 this.right = right;
18 }
19
20 public String toString() {
21 return "data=" + data + ", left=" + left + ", right = " + right;
22 }
23
24 public static void main(String[] args) {
25 Node node1 = new Node();
26 Node node2 = new Node(6);
27 Node node3 = new Node(3, node1, node2);
28 System.out.println(node1 + "\n" + node2 + "\n" + node3);
29 }
30 }
Tree:
1 class Tree {
2 Node root;
3
4 public Tree() {
5 root = null;
6 }
7
8 public Node insert(Node node, int data) {
9 if (node == null) {
10 node = new Node(data);
11 }
12 else {
13 if (node.data <= data) {
14 node.right = insert(node.right, data);
15 }
16 else {
17 node.left = insert(node.left, data);
18 }
19 }
20 return node;
21 }
22
23 public void makeTree(int[] datas) {
24 for (int i = 0; i < datas.length; i++) {
25 root = insert(root, datas[i]);
26 }
27 }
28
29 public void print(Node root) {
30 if (root == null) {
31 return;
32 }
33 System.out.print(root.data + ", ");
34 print(root.left);
35 print(root.right);
36 }
37
38 public static void main(String[] args) {
39 Tree tree = new Tree();
40 tree.makeTree(new int[]{2, 1, 3, 5, 2, 4, 0, 7});
41 tree.print(tree.root);
42 }
43 }
Node的main输出:
data=0, left=null, right = null
data=6, left=null, right = null
data=3, left=data=0, left=null, right = null, right = data=6, left=null, right = null
Tree的main输出:
2, 1, 0, 3, 2, 5, 4, 7,
【 在 axpq110 的大作中提到: 】
: Node的main输出:
: data=0, left=null, right = null
: data=6, left=null, right = null
: ...................
一下是我的三个java文件和运行结果:
【 在 axpq110 的大作中提到: 】
: Node的main输出:
: data=0, left=null, right = null
: data=6, left=null, right = null
: ...................
找到问题所在了,少了一个指针判断:
public void inOrder(TreeNode root){
if(root == null){
return;
}
inOrder(root.left);
System.out.print(root.data + " ");
inOrder(root.right);
}