EPI: 二叉搜索树

(1) 二叉搜索数的判断 

思路一:递归条件左右子树均为BSTs, 并且左孩子小于根节点,右孩子大于根节点(错误)

思路二:中序遍历结果是有序的!


(2)寻找树上某个节点的后继节点

思路:分析树的结构特点 (a). 如果节点x有右孩子,则直接返回右子树上的最左节点 (b). 找到第一个值大于x的父辈节点。

while(x->parent && x->parent->root!=x)
      x=x->parent;
return x->parent


(3)BSTs 的插入和删除***

思路:直接放弃的题,太麻烦


(4)BSTs树上的搜索,寻找第一次包含key的节点

思路:【搜索题】给定key,按照key值得大小,决定是去左子树或者右子树搜索。另外小心key==root->val的情况,因为这可能不是第一次出现!只有强调inorder的BST树,才有前后大小而言!

while(root){
     if(root->val == key){
          isFound=true;
          root=root->right;
     }
     else if(root->val < key){
           root=root->right;
     }
     else{
            first=root->val;
            root=root->left;
      }
}


(5)由array或者list构建BST

思路:将有序array or list的中间节点作为根节点,左边的作为左子树,右边的为右子树。

(6)由preorder序列构建BST

思路:由于二叉搜索树左小右大的特点,第一个节点为根节点,根后面所有小于根节点的节点构成左子树,其他的为右子树 


(7)将BST转化成sorted doubly linked list

思路:递归的思想,将root节点append到左子树返回的链表,另外,将右子树返回的list append到root节点后,最后,将新链表的首位指针连接。


(8)BST树上找最大的k个节点

思路:中序遍历BST可以很容易得到最小的k个节点,返回来,我们利用right-root-left的顺序,可以得到最大的k个节点



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值