小知识,大挑战!本文正在参与“程序员必备小知识”创作活动
二叉树的应用
【概念】二叉排序树
又称二叉查找树(BST,Binary Search Tree) 一棵二叉树或者是空二叉树,或者是具有如下性质的二叉树: 左子树上所有结点的关键字均小于根结点的关键字; 右子树上所有结点的关键字均大于根结点的关键字。 左子树和右子树又各是一棵二叉排序树。
【概念】二叉排序树的查找
左子树结点值< 根结点值< 右子树结点值 若树非空,目标值与根结点的值比较: 若相等,则查找成功; 若小于根结点,则在左子树上查找,否则在右子树上查找。 查找成功,返回结点指针;查找失败返回NULL
【概念】二叉排序树的插入
若原二叉排序树为空,则直接插入结点; 否则,若关键字k小于根结点值,则插入到左子树, 若关键字k大于根结点值,则插入到右子树
【概念】二叉排序树的构造
按照序列str={45, 24, 53,12}建立BST
按照序列str={24, 45, 12,53}建立BST
序列不同,二叉树的构造不同
【概念】二叉排序树的删除
第1种情况
先搜索找到目标结点: ① 若被删除结点z是叶结点,则直接删除,不会破坏二叉排序树的性质。
第2种情况
先搜索找到目标结点:
① 若被删除结点z是叶结点,则直接删除,不会破坏二叉排序树的性质。 ② 若结点z只有一棵左子树或右子树,则让z的子树成为z父结点的子树,替代z的位置。
第3种情况
先搜索找到目标结点: ① 若被删除结点z是叶结点,则直接删除,不会破坏二叉排序树的性质。 ② 若结点z只有一棵左子树或右子树,则让z的子树成为z父结点的子树,替代z的位置。 ③ 若结点z有左、右两棵子树,则令z的直接后继(或直接前驱)替代z,然后从二叉排序树中删去这个直接后 继(或直接前驱),这样就转换成了第一或第二种情况。