java建立普通二叉樹
阿新 • • 發佈:2019-01-28
這段時間一直在複習資料結構的知識。從最基礎的開始,實現一個普通的二叉樹。但發現也不那麼簡單。因為之前學資料結構時是用C語言寫的。指標用來對結構體的值操作比較好理解。但java沒有指標。而Node節點在方法中傳遞的是地址。如果直接對形參進行new操作是錯誤的。無法改變實參的值的。這一點坑了我很久,然後一頓查資料。
- 一個方法不能修改一個基本資料型別的引數
- 一個方法可以修改一個物件引數的狀態
- 一個方法不能實現讓物件引數引用一個新物件(這句話在這裡尤為適用)
下面是非常簡單的實現
package tree.binarytree; class Node{ String data; private Node lchild; private Node rchild; Node(String data){ this.data = data; } public String getData() { return data; } public void setData(String data) { this.data = data; } public Node getLchild() { return lchild; } public void setLchild(Node lchild) { this.lchild = lchild; } public Node getRchild() { return rchild; } public void setRchild(Node rchild) { this.rchild = rchild; } } public class BinaryTree { private static Node root; private static String [] treeNodes; static int index; public BinaryTree(String tree) { root = new Node(""); treeNodes = tree.split(","); index = 0; createTree(root); } /** * 先序建立 */ public static Node createTree(Node node) { String data = treeNodes[index]; System.out.println("index "+index+" data "+data); index++; if(data.equals("#")){ return null; } else { //node.setData(data);//並沒有將Node賦值過去 是因為java傳的是值 //new 之後地址不再是原來的了 node.setData(data);; node.setLchild(createTree(new Node(""))); node.setRchild(createTree(new Node(""))); return node; } } public Node getRoot() { return root; } }
下面是寫的測試類
package tree.binarytree;
public class BinaryTreeTest {
public static void main(String[] args) {
BinaryTree tree = new BinaryTree("A,B,#,D,#,#,C,#,#");
Node node = tree.getRoot();
System.out.println(node.getData());
}
}
下週有空把樹的基本操作寫一下。