查找问题:1.静态查找和动态查找。2.针对动态查找,数据应该如何组织?
什么是二叉搜索树(二叉搜索树也称二叉排序树或二叉查找树)?
二叉搜索树:一棵二叉树,可以为空,如果不为空,满足以下性质
1.非空左子树的键值小于其根节点的键值
2.非空右子树~~~~大于~~~~~~~~~~
3.左右子树都是二叉搜索树
尾递归:在要返回结果的时候进行递归
从编译的角度看,尾递归都可以用循环来实现
查找的效率取决于树的高度
二叉树的删除:
有三种情况:
1.要删除的是叶节点:直接删除,并再修改其父结点指针---置为NULL
2.要删除的结点只有一个孩子的结点(将其父结点的指针指向要删除结点的孩子结点)
3.要删除的结点有左右两棵子树:用另一结点替代被删除结点:右子树的最小元素或者左子树的最大元素。(1)取右子树中的最小元素替代 (2)取左子树的最大元素替代
用另一结点替代被删除结点的好处:没有孩子,容易删除