public class TwoLinkBinTree {
public class TreeNode{//创建树节点内部类
String data;
TreeNode left;
TreeNode right;
public TreeNode(){}
public TreeNode(String data){
this.data=data;
}
public TreeNode(String data,TreeNode left,TreeNode right){
this.data=data;
this.left=left;
this.right=right;
}
}
private TreeNode root;
public TwoLinkBinTree(){//默认构造器创建二叉树
this.root=new TreeNode();
}
public TwoLinkBinTree(String data){//指定根元素来创建二叉树
this.root=new TreeNode(data);
}
/*
为指定节点添加子节点;
index,该指定节点的索引;
data,该子节点的父节点的索引;
left,判断是否是左节点
* */
public TreeNode addNode(TreeNode parent,String data,boolean left){
if(parent==null){
throw new RuntimeException("该节点为空,无法添加子节点");
}
if(left&&parent.left!=null){
throw new RuntimeException("已有左子节点");
}
if(!left&&parent.right!=null){
throw new RuntimeException("已有右子节点");
}
TreeNode newNode=new TreeNode(data);
if(left){
parent.left=newNode;
}else{
parent.right=newNode;
}
return newNode;
}
public boolean empty(){//判断二叉树是否为空
return root.data==null;
}
public TreeNode getRoot(){//返回根节点
if(empty()){
throw new RuntimeException("树为空");
}
return root;
}
//返回指定节点(非叶子)的左子节点。当左子节点不存在时返回null
public String leftNode(TreeNode parent){
if(parent==null){
throw new RuntimeException("该指定节点不存在");
}
return parent.left==null?null:parent.left.data;
}
//返回指定节点(非叶子)的右子节点。当右子节点不存在时返回null
public String rightNode(TreeNode parent){
if(parent==null){
throw new RuntimeException("该指定节点不存在");
}
return parent.right==null?null:parent.right.data;
}
public int getDeep(){
return getDeep(root);
}
private int getDeep(TreeNode node){//递归获取深度
if(node==null){
return 0;
}
if(node.right==null&&node.left==null){
return 1;
}else{
int leftdeep=getDeep(node.left);
int rightdeep=getDeep(node.right);
int max=leftdeep>rightdeep?leftdeep:rightdeep;
return max+1;
}
}
public static void main(String[] args) {
TwoLinkBinTree twoLinkBinTree=new TwoLinkBinTree("root");
TwoLinkBinTree.TreeNode node1=twoLinkBinTree.addNode(twoLinkBinTree.getRoot(),"1",true);
TwoLinkBinTree.TreeNode node2=twoLinkBinTree.addNode(twoLinkBinTree.getRoot(),"2",false);
TwoLinkBinTree.TreeNode node3=twoLinkBinTree.addNode(node2,"3",true);
TwoLinkBinTree.TreeNode node4=twoLinkBinTree.addNode(node2,"4",false);
System.out.println(node2.left.data);
System.out.println(node2.right.data);
System.out.println(twoLinkBinTree.getDeep());
System.out.println(twoLinkBinTree.getRoot().data);
}
}
二叉树——二叉链表存储
猜你喜欢
转载自blog.csdn.net/Answer0902/article/details/82457511
今日推荐
周排行