java二叉樹實現代碼

來源:互聯網
上載者:User

標籤:後續遍曆   sem   空間   turn   null   treenode   key   後序遍曆   左右子樹   

public class Tree {        private TreeNode root = null;    public Tree() {        root = new TreeNode(1, "A");    }        private class TreeNode {        private int key;        private String data;        private boolean isVisted;        private TreeNode leftChild;        private TreeNode rightChild;                public TreeNode(int key, String data) {            this.key = key;            this.data = data;            this.leftChild = null;            this.rightChild = null;            this.isVisted = false;        }    }    /**     * 建立一顆二叉樹     *             A     *         B        C     *       D   E            F     * createBinTree:().      * @author 衛健     * @param root     */    public void createBinTree(TreeNode root) {        TreeNode newNodeB = new TreeNode(2, "B");        TreeNode newNodeC = new TreeNode(3, "C");        TreeNode newNodeD = new TreeNode(4, "D");        TreeNode newNodeE = new TreeNode(5, "E");        TreeNode newNodeF = new TreeNode(6, "F");        root.leftChild = newNodeB;        root.rightChild = newNodeC;//        newNodeC.rightChild = newNodeF;//        newNodeB.leftChild = newNodeD;//        newNodeB.rightChild = newNodeE;        root.rightChild.rightChild = newNodeF;        root.leftChild.leftChild = newNodeD;        root.leftChild.rightChild = newNodeE;    }        public boolean isEmpty() {        return root == null;    }    //樹的高度    public int height() {        return height(root);    }    //節點個數    public int size() {        return size(root);    }        private int height(TreeNode subTree) {        if (subTree == null)            return 0;                int i = height(subTree.leftChild);        int j = height(subTree.rightChild);                return i < j ? j + 1 : i + 1;    }        private int size(TreeNode subTree) {        if (subTree == null)            return 0;        return 1 + size(subTree.leftChild) + size(subTree.rightChild);    }    //返回雙親節點    public TreeNode parent(TreeNode element) {        return (root == null || root == element)                 ? null : parent(root, element);    }        public TreeNode parent(TreeNode subTree, TreeNode element) {        if (subTree == null)            return null;        if (subTree.leftChild == element || subTree.rightChild == element) {            //返回父節點地址            return subTree;        }        TreeNode p;        //先在左子樹中尋找,如果左子樹中沒有找到,則到右子樹中尋找        if ((p = parent(subTree.leftChild, element)) != null)            return p; //遞迴左子樹中搜尋        else            return parent(subTree.rightChild, element);    }        public TreeNode getLeftChildNode(TreeNode element) {        return element != null ? element.leftChild : null;    }        public TreeNode getRightChildNode(TreeNode element) {        return element != null ? element.rightChild : null;    }        public TreeNode getRoot() {        return root;    }        //在釋放某個節點時,該節點的左右子樹都已經釋放,    //所以應該採用後續遍曆,當訪問某個節點時將該節點的儲存空間釋放    public void distroy(TreeNode subTree) {        //刪除根為subTree的子樹        if (subTree != null) {            //刪除左子樹            distroy(subTree.leftChild);            //刪除右子樹            distroy(subTree.rightChild);            //刪除根節點            subTree = null;        }    }        public void traverse(TreeNode subTree) {        System.out.println("key:" + subTree.key + "--name:" + subTree.data);        traverse(subTree.leftChild);        traverse(subTree.rightChild);    }    //前序走訪    public void perOrder(TreeNode subTree) {        if (subTree != null) {            visted(subTree);            perOrder(subTree.leftChild);            perOrder(subTree.rightChild);        }    }    //中序遍曆    public void inOrder(TreeNode subTree) {        if (subTree != null) {            perOrder(subTree.leftChild);            visted(subTree);            perOrder(subTree.rightChild);        }    }    //後序遍曆    public void postOrder(TreeNode subTree) {        if (subTree != null) {            perOrder(subTree.leftChild);            perOrder(subTree.rightChild);            visted(subTree);        }    }    //將二叉樹鏡面對稱    public void mirror(TreeNode subTree) {        if (subTree == null)            return;        TreeNode node = new TreeNode(subTree.key, subTree.data);        node.leftChild = subTree.leftChild;        subTree.leftChild = subTree.rightChild;        subTree.rightChild = node.leftChild;        mirror(subTree.leftChild);        mirror(subTree.rightChild);    }        public void visted(TreeNode subTree) {        subTree.isVisted = true;        System.out.println("key:" + subTree.key + "---data:" + subTree.data);    }    //測試    public static void main(String[] args) {        Tree bt = new Tree();        bt.createBinTree(bt.root);                System.out.println(bt.size() + "---size");        System.out.println(bt.height() + "---height");                System.out.println("**************前序走訪************");        bt.perOrder(bt.root);        System.out.println("************鏡面對稱**前序走訪************");        bt.mirror(bt.root);        bt.perOrder(bt.root);//        System.out.println("**************中序遍曆************");//        bt.inOrder(bt.root);//        //        System.out.println("**************後序遍曆************");//        bt.postOrder(bt.root);    }    }

 

java二叉樹實現代碼

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.