13-7 判断子树的形状的代码不是很理解
来源:13-7 红黑树中添加新元素
NioCo
2019-04-29
老师你好! 第12分钟 ,判断树形状的那三个if,后面两个条件我都理解了 ,可是第一个情况,对Node的左子树进行左旋转的那个不是很理解,当前的Node不是黑色的那个节点吗,可是代码里面的判断是以Node的为基准进行操作的呀?
写回答
2回答
-
不知道我是不是没有理解你的问题。第一个if左旋转对应ppt讲的这种情况:
此时,当递归回溯到37节点的时候,满足第一个if,即37的右孩子是42,同时37的左孩子不能为红,就左旋转。(如果是红,37的左右孩子都是红色,做flip color就好了。)
此时,你可以再回顾一下左旋转,理解一下左旋转到底做了什么事情。是的,此时,要纠正42,需要从37的视角去做这个左旋转,旋转后,42是37的根,37变成了42的左孩子。请注意我们左旋转的注释:
// node x // / \ 左旋转 / \ // T1 x ---------> node T3 // / \ / \ // T2 T3 T1 T2 private Node leftRotate(Node node){ Node x = node.right; // 左旋转 node.right = x.left; x.left = node; x.color = node.color; node.color = RED; return x; }
继续加油!:)
012019-04-29 -
NioCo
提问者
2019-04-29
谢谢老师 ,我的疑问是这张图,第二个if判断的是第三步,第三个if判断的是第四步,可是第二小步中的if判断难道不是if(isRed(node.left) && isRed(node.left.right) ) 吗?
042021-03-21
相似问题