說到樹結構就不得不回顧 鏈表結構 https://www.cnblogs.com/easyidea/p/13371863.html
如果鏈表結構中再多一個指針會是什么情況?
是不是像樹根一樣,這就是 樹 數據結構。
class TreeNode<E>{ //類名 :Java類就是一種自定義的數據結構 E val; //數據 :節點數據 TreeNode left; //對象 :引用下一個節點對象。在Java中沒有指針的概念,Java中的引用和C語言的指針類似 TreeNode right; //對象 :引用下一個節點對象。在Java中沒有指針的概念,Java中的引用和C語言的指針類似 TreeNode(E val){ //構造方法 :構造方法和類名相同 this.val=val; //把接收的參數賦值給當前類的val變量 } } public class Test{ public static void main(String[] args){ TreeNode<Integer> root = new TreeNode<Integer>(3); //創建根節點 growth(root,2); //創建深度為3的樹結構 print(root); //打印樹結構 } //通過遞歸的方式創建樹的子節點 static void growth(TreeNode root,int deep){ if(deep==0) return; TreeNode<Integer> left = new TreeNode<Integer>(deep); //創建左子節點 TreeNode<Integer> right = new TreeNode<Integer>(deep); //創建右子節點 root.left=left; root.right=right; growth(left,deep-1); //遞歸調用 growth(right,deep-1); //遞歸調用 } //通過遞歸的方式打印樹結構 static void print(TreeNode root){ if(root==null){ return; } System.out.print(root.val); print(root.left); //遞歸調用 print(root.right); //遞歸調用 } }
如上面的示例構建的是一顆標准的二叉樹結構:
當然樹的結構還可以是N叉樹:數中每個節點的子節點個數相同,子節點個數是多少就叫做 多少叉樹。
如下面3叉樹:
三叉樹節點:
class TreeNode<E>{ //類名 :Java類就是一種自定義的數據結構 E val; //數據 :節點數據 TreeNode left; //對象 :引用下一個節點對象。在Java中沒有指針的概念,Java中的引用和C語言的指針類似 TreeNode center; //對象 :引用下一個節點對象。在Java中沒有指針的概念,Java中的引用和C語言的指針類似 TreeNode right; //對象 :引用下一個節點對象。在Java中沒有指針的概念,Java中的引用和C語言的指針類似 TreeNode(E val){ //構造方法 :構造方法和類名相同 this.val=val; //把接收的參數賦值給當前類的val變量 } }
當然樹的結構還可以是不規則的,如下圖所示:
這樣的結構怎么表示呢?
下面給出了一種表示方法:
class TreeNode<E>{ //類名 :Java類就是一種自定義的數據結構 E val; //數據 :節點數據 //對象 :引用下一個節點對象。在Java中沒有指針的概念,Java中的引用和C語言的指針類似 //用來存放一堆子節點 List<TreeNode> childs TreeNode(E val){ //構造方法 :構造方法和類名相同 this.val=val; //把接收的參數賦值給當前類的val變量 } }