代码如下,貌似都插入成功了?怎么遍历不出来?高手点拨,谢谢,送风
为什么只打印一个节点了?哪里问题,谢谢---------Node类------------
public class BTNode {
private char key;
private BTNode leftNode;
private BTNode rightNode;

public BTNode(char key,BTNode leftNode,BTNode rightNode){
this.key = key;
this.leftNode = leftNode;
this.rightNode = rightNode;
}

public BTNode(char key){
this(key,null,null);
} public char getKey() {
return key;
} public void setKey(char key) {
this.key = key;
} public BTNode getLeftNode() {
return leftNode;
} public void setLeftNode(BTNode leftNode) {
this.leftNode = leftNode;
} public BTNode getRightNode() {
return rightNode;
} public void setRightNode(BTNode rightNode) {
this.rightNode = rightNode;
}


}
---------Tree类------------
public class BinaryTree {
private BTNode root;
public BinaryTree(BTNode root){
this.root = root;
}

public BinaryTree(){
root = null;
}

public BTNode getRoot(){
return root;
}


/**
 * search or visit node
 */
public static void visit(BTNode node){
System.out.println("访问 node : "+ node.getKey());
}

/**
 * insert or visit node
 */
public  static BTNode insert(BTNode node,char key){
if(node == null){
node = new BTNode(key);
}else if(key <= node.getKey()){
System.out.println("------left--------");
BTNode temp = node.getLeftNode();
temp = insert(node.getLeftNode(),key);
node = temp;

}else{
System.out.println("------right--------");
BTNode temp = node.getRightNode();
temp = insert(node.getRightNode(),key);
node = temp;
}
System.out.println("--------------"+node.getKey());
return node;
}


public void insert(char key){
root = insert(root,key);
}

 public void buildTree( char [] key){ 
      for ( int i=0;i<key. length ;i++){ 
         insert(key[i]); 
      }  
  }         /**
 * previously order traversal the recursion method
 */

public static void preorder(BTNode node){
if(node != null){
visit(node);
preorder(node.getLeftNode());
preorder(node.getRightNode());
}
}
        public static void main(String[] args){
                BinaryTree bTree = new BinaryTree();
char[] key={'H','A','D','S','E'}; 
        bTree.buildTree(key); 
                System.out.print(" Pre-Order:");
                preorder(bTree.getRoot());
}

解决方案 »

  1.   

    你的树根本就没有建立起来。最后你得到的只有最后一个节点E所构成的单节点树。也就是说,你的遍历只会输出最后一个节点的key
      

  2.   

    node = temp; 
    ls的朋友,我也发现了,问题是怎么建了?谢谢
      

  3.   

    那么,我需要知道你的想法。你是想要建随意的一棵树吗?如果是这样下面的代码请你看一下。我用它代替了你的insert方法。
    public void insertNode(BTNode node, char key) {
    if (node == null) {
    root = new BTNode(key);
    return;
    }
    char nodeKey = node.getKey();
    if (key < nodeKey) {
    BTNode lNode = node.getLeftNode();
    if (lNode == null) {
    node.setLeftNode(new BTNode(key));
    } else {
    insertNode(lNode, key);
    }
    } else {
    BTNode rNode = node.getRightNode();
    if (rNode == null) {
    node.setRightNode(new BTNode(key));
    } else {
    insertNode(rNode, key);
    }
    } }
      

  4.   

    node = temp; 
    改为node.setLeftNode(temp);(左边)
    或node.setRightNode(temp);(右边)
      

  5.   

    package tree.test;public class BinaryTree {
    private BTNode root; public BinaryTree(BTNode root) {
    this.root = root;
    } public BinaryTree() {
    root = null;
    } public BTNode getRoot() {
    return root;
    } /**
     * search or visit node
     */
    public void visit(BTNode node) {
    System.out.println("访问 node : " + node.getKey());
    } /**
     * insert or visit node
     */
    public BTNode insert(BTNode node, char key) {
    if (node == null) {
    node = new BTNode(key);
    } else if (key <= node.getKey()) {
    System.out.println("------left--------");
    BTNode temp = node.getLeftNode();
    temp = insert(node.getLeftNode(), key);
    node = temp; } else {
    System.out.println("------right--------");
    BTNode temp = node.getRightNode();
    temp = insert(node.getRightNode(), key);
    node = temp;
    }
    System.out.println("--------------" + node.getKey());
    return node;
    } public void insertNode(BTNode node, char key) {
    if (node == null) {
    root = new BTNode(key);
    return;
    }
    char nodeKey = node.getKey();
    if (key < nodeKey) {
    BTNode lNode = node.getLeftNode();
    if (lNode == null) {
    node.setLeftNode(new BTNode(key));
    } else {
    insertNode(lNode, key);
    }
    } else {
    BTNode rNode = node.getRightNode();
    if (rNode == null) {
    node.setRightNode(new BTNode(key));
    } else {
    insertNode(rNode, key);
    }
    } } public void insert(char key) {
    insertNode(root, key);
    } public void buildTree(char[] key) {
    for (int i = 0; i < key.length; i++) {
    insert(key[i]);
    }
    } /**
     * previously order traversal the recursion method
     */ public void preorder(BTNode node) {
    if (node != null) {
    visit(node);
    preorder(node.getLeftNode());
    preorder(node.getRightNode());
    }
    } public static void main(String[] args) {
    BinaryTree bTree = new BinaryTree();
    char[] key = { 'H', 'A', 'D', 'S', 'E' };
    bTree.buildTree(key);
    System.out.print(" Pre-Order:");
    bTree.preorder(bTree.getRoot());
    }
    }