Descripción general e implementación simple de la estructura de árbol de la serie de algoritmos básicos

Un árbol es una estructura de datos no lineal importante e intuitivamente es una estructura en la que los elementos de datos (llamados nodos en el árbol) están organizados en una relación de rama.

Conceptos básicos:
como se muestra en la figura: (red de referencia de imagen)
Inserte la descripción de la imagen aquí
nodo raíz: A es el nodo raíz; nodo
principal (nodo principal): B es el nodo principal de E / F;
grado de nodo: número de ramas del nodo, es decir, el número de subárboles nodos punto, nodo B, como los dos subárboles siguientes, el grado 2, empatía un nodo grado 3, es decir, el grado máximo de nodo de un árbol;
Peso del nodo: se refiere al peso del
nodo ; nodo hoja: nodo sin nodos secundarios;
altura: el número máximo de capas, por ejemplo, la altura del árbol de arriba es 4;
árbol binario: el número de nodos secundarios de cualquier nodo <= 2. Los nodos secundarios están divididos en los nodos izquierdo y derecho. Los nodos izquierdo y derecho no se pueden invertir a voluntad;
árbol binario completo: todos los nodos hoja están en la última capa, y el número total de nodos es 2 elevado a la n-ésima potencia -1;
árbol binario completo: todos los nodos de hojas están en la última capa o la penúltima capa, y los nodos de hojas de la última capa son continuos a la izquierda, y la penúltima capa es continua a la derecha; un
árbol binario completo debe ser un árbol binario completo;
recorrido de preorden: uno mismo: árbol izquierdo-árbol derecho ABEKLFCGDHMIJ
recorrido de orden medio: árbol izquierdo-uno mismo-árbol derecho ~
recorrido posterior al orden: árbol izquierdo-árbol derecho-uno mismo ~

Código:

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);
	}
}

Supongo que te gusta

Origin blog.csdn.net/langxiaolin/article/details/113790729
Recomendado
Clasificación