package com.xbb.demo.exam;
/**
* 該類爲按原始要求寫的,未添加任何原始框架以外的方法;
* 因要求二要求中序遍歷按從小到大排序,所以按左子列爲小,右子列爲大新增節點.
*/
public class BinaryTree {
public static void main(String[] args) {
final int[] values = { 1, 3, 4, 5, 2, 8, 6, 7, 9, 0 };
// TODO:
Node node = null;
for (int value:values) {
node = createBinaryTree(node,value);
}
inOrderTransval(node);
}
/**
* 原始要求:通過一個方法
* 比較新加的值與原節點的大小;
* 如果原節點值大於等於新增節點,返回True(代表放入左)
* 如果原節點值小於新增節點,返回False(代表放入右)
* @param node
* @param value
* @return
*/
public static Node createBinaryTree(Node node,int value){
// TODO:
// 如果節點爲空,代表爲根節點,創建根節點寫入當前值並返回
if (node == null){
return new Node(value);
}else{
// 根據左右寫入規則,判斷新增節點Value與當前節點Value的大小,從而判斷寫入左列還是右列
// 新節點值<=當前節點 寫入左列
if (node.getValue() >= value){
// 判斷當前節點下是否爲爲空,
// 如果不爲空則遞歸進入當前方法尋找下一個節點
if (node.getLeft() != null){
createBinaryTree(node.getLeft(),value);
// 如果爲空則創建節點寫入新值
}else{
node.setLeft(new Node(value));
}
// 否則,寫入右列
}else{
// 判斷當前節點下是否爲爲空,
// 如果不爲空則遞歸進入當前方法尋找下一個節點
if (node.getRight() != null){
createBinaryTree(node.getRight(),value);
}else{
// 如果爲空則創建節點寫入新值
node.setRight(new Node(value));
}
}
return node;
}
}
/**
* 中序排序輸出
* @param node
*/
public static void inOrderTransval(Node node) {
// TODO:
// 結束遞歸條件:節點爲空
if (node == null) return ;
// 如果當前節點左節點不爲空,遞歸排序左子
if (node.getLeft() != null){
inOrderTransval(node.getLeft());
}
System.out.print(node.getValue()+",");
// 如果當前節點右節點不爲空,遞歸排序右子
if (node.getRight() != null){
inOrderTransval(node.getRight());
}
}
}
class Node {
// 節點值
private int value;
// 左節點
private Node left;
// 右節點
private Node right;
public Node(int value){
this.value = value;
}
// TODO:
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
public Node getLeft() {
return left;
}
public void setLeft(Node left) {
this.left = left;
}
public Node getRight() {
return right;
}
public void setRight(Node right) {
this.right = right;
}
}
二叉排序樹,新增節點,前序遍歷,中序遍歷,後續遍歷
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.