ツリーは重要な非線形データ構造であり、直感的には、データ要素(ツリー内のノードと呼ばれる)が分岐関係で編成されている構造です。
基本概念:(
画像参照ネットワーク)
ルートノード: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);
}
}