이 진 트 리 의 세 갈래 링크 저장 구조의 간단 한 실현

세 갈래 체인 테이블 의 저장 구 조 는 두 갈래 체인 테이블 보다 부모 노드 를 가리 키 는 인용 이 많아 서 공간 비용 을 증 가 했 지만 검색 속 도 를 향상 시 켰 다.다음은 소스 코드 로 기능 이 많 지 않 지만 이러한 데이터 구 조 를 빨리 이해 하 는 데 도움 을 줄 수 있 습 니 다.
//a simple example to ThreeLinkBinTree
//HanChun at Xidian University

package mywork.c20150611;

public class ThreeLinkBinTree {
	
	public static class TreeNode{
		TreeNode left;
		TreeNode right;
		TreeNode parent;
		Object data;
		
		public TreeNode(){
			
		}
		
		public TreeNode(Object data){
			this.data = data;
		}
		
		/**
		 *         
		 * @param data     
		 * @param parent           
		 * @param left           
		 * @param right           
		 */
		public TreeNode(Object data, TreeNode parent, TreeNode left, TreeNode right){
			this.data = data;
			this.parent = parent;
			this.left = left;
			this.right = right;
		}
	}
	
	TreeNode root;		//     
	
	public ThreeLinkBinTree(){
		root = new TreeNode();
	}
	
	public ThreeLinkBinTree(T data){
		this.root = new TreeNode(data);
	}
	
	public TreeNode addNode(T data, TreeNode parent, boolean isLeft){
		if(parent == null){
			System.out.println("     ,        !");
		}
		if(parent.left != null && isLeft){
			System.out.println("      ,        !");
		}
		if(parent.right != null && !isLeft){
			System.out.println("      ,        !");
		}
		TreeNode newNode = new TreeNode(data);
		if(isLeft){
			parent.left = newNode;
		}else{
			parent.right = newNode;
		}
		newNode.parent = newNode;
		return newNode;
	}
	
	public boolean isEmpty(){
		return root.data == null;
	}
	
	//    ,               ,        
	//  ,“   java”,
	public int deep(TreeNode node){
		if(node == null){
			return 0;
		}
		if(node.left == null && node.right == null){
			return 1;
		}
		int leftDeep = deep(node.left);
		int rightDeep = deep(node.right);
		int max = leftDeep > rightDeep ? leftDeep : rightDeep;
		return max + 1;
	}	
}

좋은 웹페이지 즐겨찾기