我有用于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(); } }
[更新] :更新了代码以使用数组生成二叉树。这将减少用户交互。