基本的なアルゴリズムシリーズのツリー構造の概要と簡単な実装

ツリーは重要な非線形データ構造であり、直感的には、データ要素(ツリー内のノードと呼ばれる)が分岐関係で編成されている構造です。

基本概念:(
画像参照ネットワーク)
ここに画像の説明を挿入
ルートノード:Aはルートノード、
親ノード(親ノード):BはE / Fの親ノード、
ノード次数:ノードのブランチ数、つまり、次の2つのサブツリーなどのサブツリーノードポイント、ノードBの数、次数2、ノード次数3、つまりツリーの最大ノード次数に共感します。
ノードの重み:の重みを指します。
ノード;リーフノード:子ノードのないノード;
高さ:レイヤーの最大数、たとえば、上のツリーの高さは4です;
二分木:任意のノードの子ノードの数<= 2。子ノードは分割されます左右のノードに。左右のノードを自由に反転させることはできません。
完全な二分木:すべてのリーフノードが最後の層にあり、ノードの総数は2のn乗-1です。
完全な二分木:すべてリーフノードは最後のレイヤーまたは最後から2番目のレイヤーにあり、最後のレイヤーのリーフノードは左側で連続しており、最後から2番目のレイヤーは右側で連続しています。
完全なバイナリツリーは完全なバイナリツリーである必要があります。
プレオーダートラバーサル:自分—左ツリー-右ツリーABEKLFCGDHMIJ
ミドルオーダートラバーサル:左ツリー-自分-右ツリー〜
ポストオーダートラバーサル:左ツリー-右ツリー-自分〜

コード:

public class TreeNode{
    
    	//结点类
	int value;
	TreeNode left;
	TreeNode right;
	public TreeNode(int value){
    
    
		this.value=value;
	}
	public void setlnode(TreeNode left){
    
    
		this.left=left;
	}
	public void setrnode(TreeNode right){
    
    
		this.right=right;
	}
	public void frontshow(){
    
    
		System.out.println(value);
		if(left!=null){
    
    
			left.frontshow();
		}
		f(right!=null){
    
    
			right.frontshow();
		}
	}
	public TreeNode frontSearch(int i){
    
    
		if(this.value==i){
    
    
			return this;
		}else{
    
    
			if(left!=null)
				TreeNode target=left.frontSearch(i);
			if(target!=null)
				return target;
			if(left!=null)
				TreeNode target=right.frontSearch(i);	
			return target;
		}
	}
	public void delete(int i){
    
    
		TreeNode parent=this;
		if(parent.left.value==i){
    
    
			parent.left=null;
			return;
		}
		if(parent.right.value==i){
    
    
			parent.right=null;
			return;
		}
		parent=left;
		if(parent!=null)
			parent.delete(i);
		parent=right;
		if(parent!=null)
			parent.delete(i);
	}
}

public class BinaryTree{
    
      //创建根结点
	TreeNode root;
	public void setRoot(TreeNode root){
    
    
		this.root=root;
	}
	public TreeNode getRoot(){
    
    
		return root;
	}
	public void frontshow(){
    
    
		root.frontshow();
	}
	public TreeNode frontSearch(int i){
    
    
		return root.frontSearch(i);
	}
	public void delete(int i){
    
    
		if(root.value==i)
			root=null;
		else
			root.delete(i);
	}
}

public class TestBinaryTree{
    
    
	public static void main(String[]args){
    
    
		BinaryTree binTree=new BinaryTree;  //空树
		TreeNode root=new TreeNode(1);  //根结点
		binTree.setRoot(root);
		TreeNode rootL=new TreeNode(2);
		root.setlnode(rootL);
		TreeNode rootR=new TreeNode(3);
		root.setrnode(rootR);
	}
}

おすすめ

転載: blog.csdn.net/langxiaolin/article/details/113790729
おすすめ