1.删除叶节点:删除该节点,并使该节点的父结点指向NULL 2.要删除的节点只有一个孩子:将其父节点的指针指向要删除的孩子节点 3.要删除的节点有左右两棵子树:取右子树中最小的元素替代or取左子树中最大的元素替代 返回左子树删除了x这个节点后新的左子树根结点的地址 平衡二叉树 不同的插入次序形成的搜索树: ...
增加和删除可能需要通过一次或多次树旋转来重新平衡这个树。 平衡因子pf 等于左子树深度减右子树深度 性质: 它或者是颗空树,或者是具有下列性质的二叉树: 它的左子树和右子树都是平衡二叉树,且左子树和右子树的深度之差的绝对值不超过1。 若将二叉树节点的平衡因子BF定义为该节点的左子树的深度减去它的右子树的...
平衡二叉树删除的流程: 删除结点(和二叉排序树相同) 如果结点时叶结点直接删 如果删除的结点只有一个子树,用子树代替 如果删除节点有两个子树,用前驱或后继节点顶替,并转换为对前驱或后继节点的删除(找前驱节点就是找到其左儿子,然后一路向右找;找后继节点就是对其右儿子一路往左找;这里不断递归,总会替换到1、...
所以要对树进行调整:属于RR,所以要单左转。 e)接下来,插入90,没有问题。然后插入53,插入后出现不平衡,所以要调整,属于RL,需要先进行左旋转,再进行右旋转。 这里是难点:因为37的平衡因子是-2,所以是不平衡的,再看是RL型,先把53插入到37和90之间,如图g,然后就变成了RR型,需要把37降下了,如图h,把37、53...
平衡二叉树的删除操作 删除的旋转和二叉树的插入的旋转类型,可以参考文章末尾的历史文章,删除操作如果遇到失衡,此时需要旋转,旋转也有四种情况,LL,LR,RR和RL型,判断类型也是通过平衡因子。如果一个节点的平衡因子大于1,此时为LR或者LL类型。如果当前节点的左孩子的平衡因子大于等于0,此情况为LL,否则为LR。
二、删除 2.1 删除的单旋操作 2.2 删除的双旋操作 本文假设读者熟悉BST(搜索二叉树)的插入与删除。(可以看B站邓俊辉老师的《数据结构(C++版)》) 本文规定平衡因子: 左子树高度右子树高度BalFac(x)=左子树高度−右子树高度 一、插入 假设我们插入一个节点,然后沿着这个节点的祖先一路向上找到的第一一 个失衡的...
树被用来存储具有层级关系的数据,比如文件系统中的文件;树还被用来存储 有序列表。 选择树而不是那些基本的数据结构,是因 为在二叉树上进行查找非常快(而在链表上查找则不是这样),为二叉树添加或删除元素 也非常快(而对数组执行添加或删除操作则不是这样)。
[i]);}}//***平衡二叉树的删除***voidDelete2(AVL_node*p,AVL_node*&p2){if(p2->rchild)Delete2(p,p2->rchild);else{p->data=p2->data;AVL_node*temp=p2;p2=p2->lchild;deletetemp;temp=NULL;}if(p2)p2->heigh=std::max(GetHeigh(p2->lchild),GetHeigh(p2->rchild))+1;}voidDelete(AVL...
结果一 题目 在平衡二叉树上删除一个结点后仍使其平衡,最坏情况下需要旋转多少次? 答案 设树的高度为h,则最坏时需要从最深分支的倒数第3层开始一直旋转到根,不论是单旋转还是双旋转都算旋转一次,就是h-2次相关推荐 1在平衡二叉树上删除一个结点后仍使其平衡,最坏情况下需要旋转多少次?
不久前小编分享了平衡二叉树的创建以及插入操作,类似于添加操作,从平衡二叉树中删除节点也分为两步,第一步完成节点的删除,第二步找到因为删除而导致不满足平衡二叉树要求的子树并对其进行调整。虽然平衡二叉树的结点删除操作的代码比较复杂,但是经过认真分析后,可以发现删除过程只有以下3种情况:...