1 。
อินเทอร์เฟซสาธารณะ BinaryTreeInterface <T> {สาธารณะ t getRootData (); สาธารณะ int getheight (); สาธารณะ int getNumberOfroot (); โมฆะสาธารณะชัดเจน (); โมฆะสาธารณะ settree (t rootdata); // 用 rootdata 设置树โมฆะสาธารณะ setTree (t rootdata, binaryTreeInterface <t> ซ้าย, BinaryTreeInterface <T> ขวา); // 设置树, 用左右子节点} 2 节点类
แพ็คเกจ com.jimmy.impl; คลาสสาธารณะ BinaryNode <T> {ข้อมูลส่วนตัว t; ส่วนตัว BinaryNode <T> ซ้าย; // 左子节点 BinaryNode ส่วนตัว <T> ขวา; // 右子节点 Public BinaryNode () {this (null);} public BinaryNode (t data) {this (data, null, null);} binaryNode สาธารณะ (ข้อมูล t, binaryNode <t> ซ้าย, binaryNode <t> ขวา) {this.data = ข้อมูล; this.left = ซ้าย; this.right = ขวา;} สาธารณะ t getData () {ส่งคืนข้อมูล; } โมฆะสาธารณะ setData (ข้อมูล t) {this.data = ข้อมูล; } BinaryNode สาธารณะ <T> getLeft () {return ซ้าย; } โมฆะสาธารณะ setleft (binaryNode <t> ซ้าย) {this.left = ซ้าย; } สาธารณะ binaryNode <t> getright () {return ขวา; } โมฆะสาธารณะ setright (binaryNode <t> ขวา) {this.right = ขวา; } บูลีนสาธารณะ Hasleft () {กลับไปทางซ้าย! = null; } บูลีนสาธารณะ hasright () {return ขวา! = null; } บูลีนสาธารณะ isleaf () {return (ซ้าย == null) && (ขวา == null); } public int getheight () {return getheight (นี่); } public int getheight (binaryNode <t> โหนด) {int h = 0; if (node! = null) h = 1+math.max (node.getheight (node.left), node.getheight (node.right)); กลับ h; } public int getNumofNodes () {int lnum = 0, rnum = 0; ถ้า (ซ้าย! = null) lnum = ซ้าย getNumofNodes (); ถ้า (ขวา! = null) rnum = right.getNumofNodes (); ส่งคืน lnum+rnum+1; -3. 二叉树实现
แพ็คเกจ com.jimmy.impl; นำเข้า java.util.stack; นำเข้า com.jimmy.binaryTreeInterface; คลาสสาธารณะ BinaryTree <T> ใช้ BinaryTreeInterface <T> {ส่วนตัว BinaryNode <T> รูท; // 只要一个数据节点就够了 // 构造空树 Public BinaryTree () {root = null; } // 用 RootData (构造树(有个根) BinaryTree สาธารณะ (t rootdata) {root = ใหม่ binaryNode <T> (rootData); } // 用其他树构造树 Public BinaryTree (t rootdata, binarytree <t> lefttree, binarytree <t> RightTree) {root = ใหม่ binaryNode <t> (rootdata); if (lefttree! = null) {root.setleft (lefttree.rree.root); } if (RightTree! = null) {root.setright (RightTree.Root); }} // 用 RootData 设置树(有个根) @Override โมฆะสาธารณะ setTree (t rootData) {root = ใหม่ binaryNode <t> (rootdata); } // 用其他树设置树โมฆะสาธารณะ setTree (t rootdata, binaryTreeInterface <t> ซ้าย, binaryTreeInterface <t> ขวา) {root = ใหม่ binaryNode <t> (rootData); binaryTree lefttree = null; BinaryTree RightTree = NULL; if ((lefttree = (binarytree) ซ้าย)! = null) {root.setleft (lefttree.rree.root); } if ((RightTree = (BinaryTree) ขวา)! = null) {root.setright (RightTree.Root); }} @Override โมฆะสาธารณะ Clear () {root = null; } @Override public int getheight () {// todo วิธีการที่สร้างอัตโนมัติ stub return root.getheight (); } @Override สาธารณะ int getNumberOfRoot () {// วิธีการที่สร้างอัตโนมัติ todo stub return 0; } @Override สาธารณะ t getRootData () {ถ้า (root! = null) return root.getData (); อื่นกลับโมฆะ; } BinaryNode สาธารณะ <T> getRoot () {return root; } โมฆะสาธารณะ setroot (binaryNode <t> root) {this.root = root; } public int getNumofNodes () {return root.getNumOfNodes (); } โมฆะสาธารณะ InorderTraverse () {InorderTraverse (รูท); } // 用栈方法遍历โมฆะสาธารณะ InorderStackTraverse () {stack <binaryNode> stack = ใหม่สแต็ก <BinaryNode> (); binaryNode cur = root; //stack.push(Root); ในขณะที่ (! stack.isempty () || (cur! = null)) {ในขณะที่ (cur! = null) {stack.push (cur); cur = cur.getleft (); } if (! stack.isempty ()) {binaryNode tmp = stack.pop (); if (tmp! = null) {system.out.println (tmp.getData ()); cur = tmp.getright (); }}}} // 递归遍历โมฆะสาธารณะ InorderTraverse (binaryNode <t> node) {ถ้า (node! = null) {inorderTraverse (node.getLeft ()); System.out.println (node.getData ()); InorderTraverse (node.getright ()); }} โมฆะคงที่สาธารณะหลัก (สตริง [] args) {binarytree <string> t = ใหม่ binarytree <string> (); binarytree <string> t8 = ใหม่ binarytree <string> ("8"); binarytree <string> t7 = ใหม่ binarytree <String> ("7"); // 用 t7, t8 设置树 tt.inorderstacktraverse (); system.out.println (t.getheight ());}}通过此文, 希望能帮助到大家, 谢谢大家对本站的支持!