public class BinaryTree {
TreeNode rootNode;
public void setRootNode(TreeNode rootNode) {
this.rootNode = rootNode;
}
public TreeNode getRootNode() {
return rootNode;
}
public void fontShow() {
if(rootNode !=null){
rootNode.fontShow();
}
}
public void middleShow() {
if(rootNode !=null) {
rootNode.middleShow();
}
}
public void afterShow() {
if(rootNode !=null) {
rootNode.afterShow();
}
}
public TreeNode fontSearch(int i) {
return rootNode.fontSearch(i);
}
public void deleteNode(TreeNode deleteNode) {
if (deleteNode == rootNode){
rootNode=null;
return;
}
rootNode.deleteNode(deleteNode);
}
}
public class TreeNode {
int data;
TreeNode leftNode;
TreeNode rightNode;
public TreeNode(int data) {
this.data = data;
}
public void setLeftNode(TreeNode leftNode) {
this.leftNode = leftNode;
}
public void setRightNode(TreeNode rightNode) {
this.rightNode = rightNode;
}
public void fontShow() {
System.out.println(this.data);
if(leftNode !=null){
leftNode.fontShow();
}
if(rightNode!=null){
rightNode.fontShow();
}
}
public void middleShow() {
if(leftNode!=null){
leftNode.middleShow();
}
System.out.println(this.data);
if(rightNode!=null){
rightNode.middleShow();
}
}
public void afterShow() {
if(leftNode!=null){
leftNode.afterShow();
}
if(rightNode!=null){
rightNode.afterShow();
}
System.out.println(this.data);
}
public TreeNode fontSearch(int i) {
TreeNode target = null ;
if (this.data == i ){
return this;
}
if (leftNode!=null){
target = leftNode.fontSearch(i);
}
if (target==null){
if (rightNode!=null){
target = rightNode.fontSearch(i);
}
}
return target;
}
public void deleteNode(TreeNode deleteNode) {
if (this.leftNode!=null && this.leftNode == deleteNode){
this.leftNode=null;
return;
}
if (this.rightNode!=null && this.rightNode == deleteNode ){
this.rightNode=null;
return;
}
if (this.leftNode != null){
this.leftNode.deleteNode(deleteNode);
}
if (this.rightNode !=null){
this.rightNode.deleteNode(deleteNode);
}
}
}
public class Test {
public static void main(String[] args) {
BinaryTree binaryTree = new BinaryTree();
TreeNode root = new TreeNode(1);
binaryTree.setRootNode(root);
TreeNode leftNode = new TreeNode(2);
root.setLeftNode(leftNode);
TreeNode rightNode = new TreeNode(3);
root.setRightNode(rightNode);
TreeNode leftNode4Left = new TreeNode(4);
TreeNode leftNode4Right = new TreeNode(5);
leftNode.setLeftNode(leftNode4Left);
leftNode.setRightNode(leftNode4Right);
TreeNode rightNode4Left = new TreeNode(6);
TreeNode rightNode4Right = new TreeNode(7);
rightNode.setLeftNode(rightNode4Left);
rightNode.setRightNode(rightNode4Right);
binaryTree.fontShow();
System.out.println("------------萬惡分隔線----------------------");
binaryTree.middleShow();
System.out.println("------------萬惡分隔線----------------------");
binaryTree.afterShow();
System.out.println("------------查找某個元素----------------------");
TreeNode node = binaryTree.fontSearch(10);
System.out.println(node);
System.out.println("------------刪除節點 before----------------------");
binaryTree.fontShow();
binaryTree.deleteNode(rightNode4Right);
System.out.println("------------刪除節點 after----------------------");
binaryTree.fontShow();
}
}