科技改变生活

<pre name="code" class="java">/* * 二叉查找树 */public class BinarySearchTree {//根节点private TreeNode root = null;public static void main(String[] args) {BinarySearchTree bst = new BinarySearchTree();bst.insertTreeNode(new TreeNode(12));bst.insertTreeNode(new TreeNode(5));bst.insertTreeNode(new TreeNode(2));bst.insertTreeNode(new TreeNode(9));bst.insertTreeNode(new TreeNode(18));bst.insertTreeNode(new TreeNode(15));bst.insertTreeNode(new TreeNode(17));bst.insertTreeNode(new TreeNode(19));//打印生成的树bst.printTree();//打印最大值和最小值System.out.println(bst.searchMaximum(bst.root).key);System.out.println(bst.searchMinimum(bst.root).key);//插入数据bst.insertTreeNode(new TreeNode(13));bst.printTree();//删除数据bst.deleteTreeNode(bst.searchTreeNode(bst.root, 12));bst.printTree();//查看后继节点System.out.println(bst.searchSuccessor(bst.searchTreeNode(bst.root, 17)).key);//查看前驱节点System.out.println(bst.searchPredecessor(bst.searchTreeNode(bst.root, 17)).key);}//构造函数public BinarySearchTree() {this.root = null;}//遍历二叉树private void traverseTree(TreeNode x) {if(x != null) {traverseTree(x.left);System.out.print(x.key + " ");traverseTree(x.right);}}private void printTree() {traverseTree(root);System.out.println();}//查找键值为key的树节点private TreeNode searchTreeNode(TreeNode x,int key) {while(x != null && x.key != key) {if(key < x.key) {x = x.left;} else {x = x.right;}}return x;}//获取最小键值节点private TreeNode searchMinimum(TreeNode x) {while(x.left != null) {x = x.left;}return x;}//获取最大键值节点private TreeNode searchMaximum(TreeNode x) {while(x.right != null) {x = x.right;}return x;}//插入一个键值为key的树节点private void insertTreeNode(TreeNode z) {TreeNode y = null;TreeNode x = root;while(x != null) {y = x;if(z.key < x.key) {x = x.left;} else {x = x.right;}}z.parent = y;if(y == null) {root = z;} else if(z.key < y.key) {y.left = z;} else {y.right = z;}}private void deleteTreeNode(TreeNode z) {if(z.left == null) {transplant(z,z.right);} else if(z.right == null) {transplant(z,z.left);} else {TreeNode y = searchMinimum(z.right);if(y.parent != z) {transplant(y,y.right);y.right = z.right;z.right.parent = y;}transplant(z,y);y.left = z.left;z.left.parent = y;}}private void transplant(TreeNode u,TreeNode v) {if(u.parent == null) {root = v;} else if(u == u.parent.left) {u.parent.left = v;} else {u.parent.right = v;}if(v != null) {v.parent = u.parent;}}//查找后继节点private TreeNode searchSuccessor(TreeNode x) {if(x.right != null) {return searchMinimum(x.right);}TreeNode y = x.parent;while(y != null && x == y.right) {x = y;y = y.parent;}return y;}//查看前驱节点private TreeNode searchPredecessor(TreeNode x) {if(x.left != null) {return searchMaximum(x.left);}TreeNode y = x.parent;while(y != null && x == y.left) {x = y;y = y.parent;}return y;}//树节点private static class TreeNode {TreeNode left = null;TreeNode right = null;TreeNode parent = null;int key = 0;public TreeNode(int key) {this.key = key;}}}

,我没啥文化,,来求助大家了. 古代的,现在的. 都行

科技改变生活

相关文章:

你感兴趣的文章:

标签云: