實踐是最好的成長,發表是最好的記憶。
阿新 • • 發佈:2019-02-04
樹的孩子兄弟連結串列儲存結構,採用兩條鏈分別連線孩子和兄弟結點。其中,child指向該結點的第一個孩子結點,sibling指向該結點的下一個兄弟結點。
public class Tree<T> { private TreeNode root; private class TreeNode<T>{ //樹的孩子兄弟連結串列結點類 T data; TreeNode<T> child,sibling; //分別指向孩子、兄弟結點 public TreeNode() { } public TreeNode(T data){ this(data,null,null); } public TreeNode(T data,TreeNode<T> child,TreeNode<T> sibling){ this.data = data; this.child = child; this.sibling = sibling; } } public Tree() { } public boolean isEmpty(){ return this.root == null; } //返回p結點最後一個兄弟結點 public TreeNode<T> getLastSibling(TreeNode<T> p){ if(p==null || p.sibling==null) return null; while(p.sibling!=null) p = p.sibling; return p; } //返回p結點的最後一個孩子 public TreeNode<T> getLastChild(TreeNode<T> p){ if(p==null || p.child==null) return null; p = p.child; while(p.sibling!=null) p = p.sibling; return p; } //插入x作為根結點 public void insertRoot(T x){ this.root = new TreeNode<T>(x,this.root,null); } //插入x作為p結點的最後一個兄弟結點 public TreeNode<T> insertLastSibling(TreeNode<T> p,T x){ if(p==null) return null; while(p.sibling!=null) p = p.sibling; p.sibling = new TreeNode<T>(x); return p.sibling; } //插入x作為p結點的最後一個孩子結點 public TreeNode<T> insertLastChild(TreeNode<T> p,T x){ if(p==null) return null; if(p.child==null){ p.child = new TreeNode<T>(x); return p.child; } else return insertLastSibling(p.child,x); } //先根次序遍歷樹並返回樹的橫向凹入表示字串 public String toString(){ return toString(root,""); } //tab表示縮排量 private String toString(TreeNode<T> p,String tab){ if(p==null) return ""; return tab+p.data.toString()+"\n"+toString(p.child,tab+"\t")+toString(p.sibling,tab);//遞迴呼叫 } public Tree<String> make(){ Tree<String> tree = new Tree<String>(); tree.root = new TreeNode("中國"); tree.insertLastChild(tree.root, "北京市"); tree.insertLastChild(tree.root, "上海市"); TreeNode js = tree.insertLastChild(tree.root, "江蘇省"); tree.insertLastChild(js, "南京市"); tree.insertLastChild(js, "蘇州市"); TreeNode korea = tree.insertLastSibling(tree.root, "韓國"); tree.insertLastChild(korea,"首爾"); return tree; } public static void main(String[] args) { Tree<String> t = new Tree<String>(); System.out.println(t.make()); } }