我刚学java,试着写一个递归建立的二叉树,可是在无法递归遍历出来,希望大虾们帮帮忙,看看问题出在哪里
import java.util.*;public class MyTree {
public static void main(String args[])
{
MyBinaryTree t = new MyBinaryTree();
t.createTree(t.root);
t.showTree(t.root);
}
}
class MyBinaryTree{
public TreeNode root;
MyBinaryTree()
{
root = null;
}
public void createTree(TreeNode node)
{
Scanner sc = new Scanner(System.in);
int data = sc.nextInt();
if(data == 0)
{
return;
}
else
{
node = new TreeNode();
node.data = data;
createTree(node.left);
createTree(node.right);
}
}
public void showTree(TreeNode node)
{
if(node != null)
{
System.out.println(node.data+"");
showTree(node.left);
showTree(node.right);
}
}
}class TreeNode{
int data;
TreeNode left;
TreeNode right;
TreeNode()
{
left = null;
right = null;
}
}
import java.util.*;public class MyTree {
public static void main(String args[])
{
MyBinaryTree t = new MyBinaryTree();
t.createTree(t.root);
t.showTree(t.root);
}
}
class MyBinaryTree{
public TreeNode root;
MyBinaryTree()
{
root = null;
}
public void createTree(TreeNode node)
{
Scanner sc = new Scanner(System.in);
int data = sc.nextInt();
if(data == 0)
{
return;
}
else
{
node = new TreeNode();
node.data = data;
createTree(node.left);
createTree(node.right);
}
}
public void showTree(TreeNode node)
{
if(node != null)
{
System.out.println(node.data+"");
showTree(node.left);
showTree(node.right);
}
}
}class TreeNode{
int data;
TreeNode left;
TreeNode right;
TreeNode()
{
left = null;
right = null;
}
}
import java.util.Scanner;
public class myTree
{
public static void main(String [] args)
{
myBST t = new myBST();
Scanner sc = new Scanner(System.in);
while(true)
{
System.out.print("Please enter a int: ");
int data = sc.nextInt();
if(data == 0)
{
break;
}
t.create(data);
}
t.showTree();
}
}
class treeNode
{
private int data;
private treeNode left;
private treeNode right;
public treeNode(int data)
{
this.data = data;
this.left = null;
this.right = null;
}
public int getData()
{
return this.data;
}
public treeNode getLeft()
{
return this.left;
}
public treeNode getRight()
{
return this.right;
}
public void setLeft(treeNode left)
{
this.left = left;
}
public void setRight(treeNode right)
{
this.right = right;
}
}
class myBST
{
private treeNode root;
private int size;
public myBST()
{
root = null;
size = 0;
}
public void create(int data)
{
treeNode node = new treeNode(data);
treeNode localRoot = this.root;
if(this.root == null)
{
this.root = node;
}
else
{
localRoot = createTree(localRoot,node);
if(node.getData()<localRoot.getData())
{
localRoot.setLeft(node);
this.size++;
}
else
{
localRoot.setRight(node);
this.size++;
}
}
}
private treeNode createTree(treeNode localRoot,treeNode node)
{
if(node.getData()>localRoot.getData() && localRoot.getRight() != null)
{
localRoot = localRoot.getRight();
return createTree(localRoot,node);
}
else if(node.getData()<localRoot.getData()&&localRoot.getLeft()!= null)
{
localRoot = localRoot.getLeft();
return createTree(localRoot,node);
}
return localRoot;
}
public void showTree()
{
showTreeInOrder(this.root);
}
private void showTreeInOrder(treeNode n)
{
if(n!=null)
{
showTreeInOrder(n.getLeft());
System.out.println(n.getData());
showTreeInOrder(n.getRight());
}
return;
}
}
package tree;public class Tree { private int data;// 数据节点 private Tree left;// 左子树 private Tree right;// 右子树 public Tree(int data) {
this.data = data;
this.left = null;
this.right = null;
} /**
* 创建二叉树,返回根结点
*
* @param input
* @return
*/
public static Tree createTree(int[] input) {
Tree root = null;
Tree temp = null;
for (int i = 0; i < input.length; i++) {
// 创建根节点
if (root == null) {
root = temp = new Tree(input[i]);//此时左右两边都是空
} else {
// 回到根结点
temp = root;
// 添加节点
while (temp.data != input[i]) {
if (input[i] <= temp.data) {
if (temp.left != null) {
temp = temp.left; //左节点往下移动
} else {
temp.left = new Tree(input[i]);//这个时候root也改变了 }
} else {
if (temp.right != null) {
temp = temp.right;//
} else {
temp.right = new Tree(input[i]);//这个时候root也改变了
}
}
} }
}
return root;
} /**
* 前序遍历
*
* @param tree
*/
public static void preOrder(Tree tree) {
if (tree != null) {
System.out.print(tree.data + " ");
preOrder(tree.left);
preOrder(tree.right);
}
} /**
* 中序遍历
*
* @param tree
*/
public static void midOrder(Tree tree) {
if (tree != null) {
midOrder(tree.left);
System.out.print(tree.data + " ");
midOrder(tree.right);
}
} /**
* 后序遍历
*
* @param tree
*/
public static void posOrder(Tree tree) {
if (tree != null) {
posOrder(tree.left);
posOrder(tree.right);
System.out.print(tree.data + " ");
}
} /**
* @param args
*/
public static void main(String[] args) {
int[] input = { 4, 2, 6, 1, 3, 5, 7 };
// int[] input = { 1, 1, 1, 1, 1, 1, 1 };
Tree tree = createTree(input);
System.out.print("前序遍历:");
preOrder(tree);
System.out.print("\n中序遍历:");
midOrder(tree);
System.out.print("\n后序遍历:");
posOrder(tree);
System.out.println(Runtime.getRuntime().totalMemory());
; }
}
请参考这个
public void createTree(TreeNode node)
{
Scanner sc = new Scanner(System.in);
int data = sc.nextInt();
if(data == 0)
{
return;
}
else
{
if(node == null)
{
node = new TreeNode();
}
node.data = data;
createTree(node.left);
createTree(node.right);
}
}
改成这样就OK了