java实现二叉排序树
起因:
leetcode上的二叉树题一直没法做,二叉树的概念特点啥的都懂,但是没有用代码实现过(以前学习概念的时候用的是c语言,大一被c的头文件劝退过,所以一直都没实操
所以自己写了二叉树的数据结构;
但是对比别人用其他方法实现的二叉树,我这个简直就是白话文!
树节点:
public class TreeNode {
public int data;
public TreeNode left;
public TreeNode right;
//无参构造,默认只有一个节点,没有子节点,且这个节点的存储数据为0;
public TreeNode(int data){
this.data = data;
this.left = null;
this.right = null;
}
//有参构造,需要传入这个节点的数据,和左右节点,创建他们之间的联系
public TreeNode(int data,TreeNode left,TreeNode right){
this.data = data;
this.left = left;
this.right = right;
}
public int getData() {
return data;
}
public void setData(int data) {
this.data = data;
}
public TreeNode getLeft() {
System.out.println(this.data);
return left;
}
public void setLeft(TreeNode left) {
this.left = left;
}
public TreeNode getRight() {
System.out.println(this.data);
return right;
}
public void setRight(TreeNode right) {
this.right = right;
}
}
树
public class BinaryTree {
private TreeNode root;
public TreeNode getRoot() {
return root;
}
public void setRoot(TreeNode root) {
this.root = root;
}
public BinaryTree(){
}
public BinaryTree(TreeNode root){
this.root = root;
}
insert方法: 把方法定义为了一个静态方法,所以在调用方法的时候,需要传根节点和这个要插如的数据;
```public static void insertTree(TreeNode root,int data ){
if(data == root.data){
System.out.println("此数已经在树中存在了,加入失败!!!");
return;
}
if(data<root.data){
if(root.left==null)
root.left = new TreeNode(data);
else {
insertTree(root.left,data);
}
}else {
if(root.right==null)
root.right = new TreeNode(data);
else {
insertTree(root.right,data);
}
}
//前序遍历
public static void pre_visit(TreeNode root){
System.out.print(root.data+ " ");
if(root.left !=null){
pre_visit(root.left);
}
if(root.right !=null){
pre_visit(root.right);
}
}
//中序遍历
public static void infix_visit(TreeNode root){
if(root.left !=null){
pre_visit(root.left);
}
System.out.print(root.data+ " ");
if(root.right !=null){
pre_visit(root.right);
}
}
//后序遍历
public static void post_visit(TreeNode root){
if(root.left !=null){
pre_visit(root.left);
}
if(root.right !=null){
pre_visit(root.right);
}
System.out.print(root.data+ " ");
}