二叉查找树

来源:互联网 发布:淘宝网天猫女装夏装 编辑:程序博客网 时间:2024/05/18 03:44

1.

(1)左孩子<节点<右孩子

(2)插入 删除 查找 最大值 最小值 前驱 后继 等基本操作的复杂度都是与树高成正比O(logn) 或者O(logh),但如果数是线性链那么这些操作的时间为O(n)

(3)可通过中序遍历得到一个有序的序列

(4)找树中最小关键字,由根开始一路向左查找,知道最后一个元素;最大元素=由根开始一路向右查找直到最末端

2.前驱和后继

给定一个二叉查找树,给定中序遍历下节点x的后继和前驱节点,如果所有的关键字不相同:

后继:(1)有右子树的情况下:节点 x 的后继=大于key[x] 中关键字最小的那个,即x右子树最左边的那个元素

    (2)没有右子树情况下:x的后继=x的最低祖先节点y ,且y的左儿子也是x的祖先;可以从x向上找,知道遇到某个是其父节点的左儿子的节点时为止

(当y=parent[x] !=null  &&  x=right[y]  循环向上找,x=y; y= parent[x]  , 跳出循环后y就是x的后继节点)

比如图中13的后继节点是15,15的后继节点是17



3.插入 z

public void insert(BTree root,int data){//插入if(data>root.data){//向右走if(root.right==null){root.right=new BTree(data);}else{this.insert(root.right, data);}}else{//向左走if(root.left==null){root.left=new BTree(data);}else{this.insert(root.left, data);}}}

4.删除z

删除的话有3种情况:

(1)z节点无子树,那么parent[z]=null即可

(2)z有一个孩子,那么将其孩子链接在父亲上即可

(3)z有两个孩子,先删除z的后继节点y,后继节点y替代节点z的位置


0 0
原创粉丝点击