Java中的BinaryTree实现

我有用于BinaryTree创建和遍历的代码

class Node

{

Integer data;

Node left;

Node right;

Node()

{

data = null;

left = null;

right = null;

}

}

class BinaryTree

{

Node head;

Scanner input = new Scanner(System.in);

BinaryTree()

{

head = null;

}

public void createNode(Node temp, Integer value)

{

Node newnode= new Node();

value = getData();

newnode.data = value;

temp = newnode;

if(head==null)

{

head = temp;

}

System.out.println("If left child exits for ("+value+") enter y else n");

if(input.next().charAt(0)=='y')

{

createNode(temp.left, value);

}

System.out.println("If right child exits for ("+value+") enter y else n");

if(input.next().charAt(0)=='y')

{

createNode(temp.right, value);

}

}

public Integer getData()

{

out.println("Enter the value to insert:");

return (Integer)input.nextInt();

}

public void print()

{

inorder(head);

}

public void inorder(Node node)

{

if(node!=null)

{

inorder(node.left);

System.out.println(node.data);

inorder(node.right);

}

else

return;

}

}

class BinaryTreeWorker

{

static BinaryTree treeObj = null;

static Scanner input = new Scanner(System.in);

public static void displaymenu()

{

int choice;

do{

out.print("\n Basic operations on a tree:");

out.print("\n 1. Create tree \n 2. Insert \n 3. Search value \n 4. print list\n Else. Exit \n Choice:");

choice = input.nextInt();

switch(choice)

{

case 1:

treeObj = createBTree();

break;

case 2:

treeObj.createNode(null, null);

break;

case 3:

//searchnode();

break;

case 4:

treeObj.print();

break;

default:

return;

}

}while(true);

}

public static BinaryTree createBTree()

{

return new BinaryTree();

}

public static void main(String[] args)

{

displaymenu();

}

}

它编译并运行。但是我认为顺序遍历有问题。

我创建了下面的树,

    2

1 3

但它只打印2。

回答:

我已经尝试过用您的方式解决问题,并且将解决方案粘贴到下面。.尽管我没有对它进行彻底的测试,所以在某些情况下它可能会失败。.但是我已经针对一种情况进行了测试。请让我知道它在某些情况下是否失败。我将感谢其他人的帮助,以使这个答案更好。我同意,该解决方案不是编码二叉树的最理想方法,但是如果有人只是练习,它不会以这种方式受到损害。

import java.util.Scanner;

class Node

{

Integer data;

Node left;

Node right;

Node()

{

data = null;

left = null;

right = null;

}

}

class BinaryTree

{

Node head;

Scanner input = new Scanner(System.in);

BinaryTree()

{

head = null;

}

public void createNode(Node temp,Node newnode)

{

if(head==null)

{

System.out.println("No value exist in tree, the value just entered is set to Root");

head = newnode;

return;

}

if(temp==null)

temp = head;

System.out.println("where you want to insert this value, l for left of ("+temp.data+") ,r for right of ("+temp.data+")");

char inputValue=input.next().charAt(0);

if(inputValue=='l'){

if(temp.left==null)

{

temp.left=newnode;

System.out.println("value got successfully added to left of ("+temp.data+")");

return;

}else {

System.out.println("value left to ("+temp.data+") is occupied 1by ("+temp.left.data+")");

createNode(temp.left,newnode);

}

}

else if(inputValue=='r')

{

if(temp.right==null)

{

temp.right=newnode;

System.out.println("value got successfully added to right of ("+temp.data+")");

return;

}else {

System.out.println("value right to ("+temp.data+") is occupied by ("+temp.right.data+")");

createNode(temp.right,newnode);

}

}else{

System.out.println("incorrect input plz try again , correctly");

return;

}

}

public Node generateTree(){

int [] a = new int[10];

int index = 0;

while(index<a.length){

a[index]=getData();

index++;

}

if(a.length==0 ){

return null;

}

Node newnode= new Node();

/*newnode.left=null;

newnode.right=null;*/

return generateTreeWithArray(newnode,a,0);

}

public Node generateTreeWithArray(Node head,int [] a,int index){

if(index >= a.length)

return null;

System.out.println("at index "+index+" value is "+a[index]);

if(head==null)

head= new Node();

head.data = a[index];

head.left=generateTreeWithArray(head.left,a,index*2+1);

head.right=generateTreeWithArray(head.right,a,index*2+2);

return head;

}

public Integer getData()

{

System.out.println("Enter the value to insert:");

return (Integer)input.nextInt();

}

public void print()

{

inorder(head);

}

public void inorder(Node node)

{

if(node!=null)

{

inorder(node.left);

System.out.println(node.data);

inorder(node.right);

}

else

return;

}

}

public class BinaryTreeWorker

{

static BinaryTree treeObj = null;

static Scanner input = new Scanner(System.in);

public static void displaymenu()

{

int choice;

do{

System.out.print("\n Basic operations on a tree:");

System.out.print("\n 1. Create tree \n 2. Insert \n 3. Search value \n 4. print list\n 5. generate a tree \n Else. Exit \n Choice:");

choice = input.nextInt();

switch(choice)

{

case 1:

treeObj = createBTree();

break;

case 2:

Node newnode= new Node();

newnode.data = getData();

newnode.left=null;

newnode.right=null;

treeObj.createNode(treeObj.head,newnode);

break;

case 3:

//searchnode();

break;

case 4:

System.out.println("inorder traversal of list gives follows");

treeObj.print();

break;

case 5:

Node tempHead = treeObj.generateTree();

System.out.println("inorder traversal of list with head = ("+tempHead.data+")gives follows");

treeObj.inorder(tempHead);

break;

default:

return;

}

}while(true);

}

public static Integer getData()

{

System.out.println("Enter the value to insert:");

return (Integer)input.nextInt();

}

public static BinaryTree createBTree()

{

return new BinaryTree();

}

public static void main(String[] args)

{

displaymenu();

}

}

:更新了代码以使用数组生成二叉树。这将减少用户交互。

以上是 Java中的BinaryTree实现 的全部内容, 来源链接: utcz.com/qa/409828.html

回到顶部