- 问题:开始Node root = null; 将root传入createBiTree(Node node)后,root的地址并没有改变;
- 代码环境:这里用递归的方式建立,并用前序方式遍历;
- 原因:由于在进入createBiTree(Nodenode)调用栈之前,没有给root申请地址,而是在调用栈中申请,所以root仍是空的;
- 解决方案:
改变传入root对象引用的方式,在createBiTree()中把产生的root对象作为返回值返回.
问题代码如下:
/**
*
* @author mike
*
* 题目描述:建立并遍历二叉树,输入和建树一起,0表示叶节点,输出节点和对应的层数;
*
* 输入:1 2 0 0 3 0 0
* 输出:1--->1, 2--->2, 3--->2
*
*/
public class Main{
public static void createBiTree(Node node){
Scanner input = new Scanner(System.in);
int n = input.nextInt();
if(n != 0){
if(node == null)
node = newNode();
node.v = n;
createBiTree(node.left);
createBiTree(node.right);
}else{
node = null;
}
}
public static Node newNode(){
return new Node();
}
public static void preOrder(Node node){
if(node == null)
return;
System.out.println(node.v);
preOrder(node.left);
preOrder(node.right);
}
class Node{
int v;
Node left,right;
}
public static void main(String[] args) {
Node root = null;
createBiTree(root);
preOrder(root);
}
正确代码如下:
public class CopyOfMain{
public static Node createBiTree(){
Scanner input = new Scanner(System.in);
int n = input.nextInt();
Node node = null;
if(n != 0){
node = newNode();
node.v = n;
node.left = createBiTree();
node.right = createBiTree();
}else
return null;
return node;
}
public static Node newNode(){
Node node = new Node();
node.left = new Node();
node.right = new Node();
return node;
}
public static void preOrder(Node node,int level){
if(node == null)
return;
System.out.println(node.v + "--->" + level);
preOrder(node.left,level+1);
preOrder(node.right,level+1);
}
public static void main(String[] args) {
Node root = null;
root = createBiTree();
preOrder(root,1);
}
}
class Node{
int v;
Node left,right;
}