树、堆与优先队列的深度解析
1. 树相关问题解答
1.1 额外指针的作用
在树结构中,部分树除了维护从父节点到子节点的常规指针外,还会维护从子节点到父节点的指针,甚至维护兄弟节点间的指针。这样做能提升树遍历的灵活性。例如,维护父子节点间的双向指针,可实现树的上下移动;维护兄弟节点间的指针,能在不访问父节点的情况下遍历子节点。在 B + -树中,通过指针连接叶子节点,形成链表,能高效查找特定键并获取前后的键,数据库系统借此实现高效的随机和顺序访问,但插入和删除子节点时,管理兄弟指针会带来额外开销和复杂性。
1.2 数据结构销毁的注意事项
当两个数据结构(如二叉树和链表)指向同一块物理数据时,要遵循一定规则。若数据是动态分配的,仅在一个初始化操作中传入释放数据的函数,另一个操作将 destroy 设为 NULL ;若数据不是动态分配的,两个初始化操作的 destroy 都应设为 NULL 。
1.3 后序遍历删除子树的原因
在 bitree_rem_left 和 bitree_rem_right 中,必须使用后序遍历删除子树。因为要先完整删除子树,才能删除其父节点。前序遍历会先删除父节点,导致无法访问子节点;中序遍历也会在删除右子树前删除父节点,所以都不可行。
1.4 查找二叉搜索树中的最小和最大节点
在二叉搜索树中,最小节点是最左边的节点,通过不断跟随左指针直到分支末尾来查找。在不平衡的二叉
超级会员免费看
订阅专栏 解锁全文
2568

被折叠的 条评论
为什么被折叠?



