06树
介绍:树是由n(n>=1) 个悠闲节点组成一个具有层次关系的集合。
相关操作:
1. 树的创建
public class TreeNode{
private int data;
private TreeNode left;
private TreeNode right;
public TreeNode(){}
public TreeNode(int data){this.data = data;}
public TreeNode(int data,TreeNode left,TreeNode right){
this.data = data;
this.left = left;
this.right = right;
}
}
2. 常用方法
add(0,head);
add(2,head);
public void add(int data,TreeNode root){
if(root == null || root.data == data){
reutrn;
}
if(root.data > data){
if(root.left == null){
TreeNode new1 = new TreeNode(data);
root.left = new1;
}else{
add(data,root.left);
}
}else{
if(root.right == null){
TreeNode new1 = new TreeNode(data);
root.right = new1;
}else{
add(data,root.right);
}
}
}
输出结果(前序遍历):head = [1,0,2];
TreeNode cur = head;
public void front(){
System.out.print(cur.data);
if(cur.left != null){this.front(cur.left);}
if(cur.right != null){this.front(cur.right);}
}
输出结果:cur = [1,0,2];
TreeNode cur = head;
public void mid(){
if(cur.left != null){this.front(cur.left);}
System.out.print(cur.data);
if(cur.right != null){this.front(cur.right);}
}
输出结果:cur = [0,1,2];
TreeNode cur = head;
public void bank(){
if(cur.left != null){this.front(cur.left);}
if(cur.right != null){this.front(cur.right);}
System.out.print(cur.data);
}
输出结果:cur = [1,2,0];
delete(null,head,2,true);
public void delete(TreeNode prev,TreeNode root,int data,boolean isRight){
if(root.data == data){
if(root.left == null && root.right == null){
changeValue(prev,null,isRight);
}else if(root.left != null && root.right != null){
changeValue(prev,new TreeNode(findMin(root,root.right,true),isRight));
if(prev == null){
prev = this.root;
prev.left = root.left;
prev.right = root.right;
return;
}
if(isRight){
prev.right.right = root.right;
prev.right.left = root.left;
}else{
prev.left.right = root.right;
prev.left.left = root.left;
}
}else if(root.left != null){
changeValue(prev,root.left,isRight);
}else{
changeValue(prev,root.right,isRight);
}
return;
}
if(root.data > data){
delete(root,root.left,data,false);
}else{
delete(root,root.right,data,true);
}
}
public void changeValue(TreeNode,TreeNode value,boolean isRight){
if(prev == null){
root = value;
return;
}
if(isRight){
prev.right = value;
}else{
prev.left = value;
}
}
public int findMin(TreeNode prev,TreeNode root,boolean isRight){
if(root.left == null && root.right == null){
changeValue(prev,null,isRight);
return root.data;
}
if(root.left == null){
changeValue(prev,null,isRight);
return rppt.data;
}
return findMin(root,root.left,false);
}
输出结果:head = [0,1];
boolean flag = isExit(1,head);
public boolean isExit(int data,TreeNode root){
if(root == null){
return false;
}
if(root.data == data){
return true;
}else if(root.data > data){
return isExit(root.left,data);
}else{
reutrn isExit(root.right,data);
}
}
输出结果:flag = true;
int count = getLeafCount(head);
public int getLeafCount(TreeNode root){
if(root == null){
return 0;
}
if(root.left == null && root.right == null){
return 1;
}
return getLeafCount(root.left) + getLeafCount(root.right);
}
输出结果:count = 3;
int height = getHeight(head);
public int getHeight(TreeNode root){
if(root == null) return 0;
int leftHeight = getHeight(root.left);
int rightHeight = getHeight(root.right);
return rightHeight > leftHeight ? rightHeight + 1 : leftHeight + 1;
}
输出结果:height = 2;