左旋:以某個結點作為支點(旋轉結點),其右子結點變為旋轉結點的父結點,右子結點的左子結點變為旋轉結點的右子結點,左子結點保持不變。
旋轉前 紅節點為grand,黃節點為parent,l為child
grand.right = child;
parent.left = grand;
// 維護各個節點的parent
parent.parent = grand.parent;
// 讓parent稱為子樹的根節點
if (grand.isleftchild()) else if (grand.isrightchild()) else
// 維護child的parent屬性
if (child != null)
// 維護g的parent屬性
grand.parent = parent;// 維護g的parent屬性
右旋:以某個結點作為支點(旋轉結點),其左子結點變為旋轉結點的父結點,左子結點的右子結點變為旋轉結點的左子結點,右子結點保持不變。
旋轉前 紅節點為grand,黃節點為parent,r為child
grand.left= child;
parent.right= grand;
// 維護各個節點的parent
parent.parent = grand.parent;
// 讓parent稱為子樹的根節點
if (grand.isleftchild()) else if (grand.isrightchild()) else
// 維護child的parent屬性
if (child != null)
// 維護g的parent屬性
grand.parent = parent;// 維護g的parent屬性
二叉樹左旋右旋
額,今天先更左旋右旋,當然加強版的線段樹正在來的路上。左旋右旋,就是說可以用來平衡二叉樹,加強二叉樹的效率。如果閱讀上有些困難,建議畫乙個圖來看。include include usingnamespace std int n structnode pool 100100 root void ins...
二叉樹左旋和右旋
樹的旋轉,分為左旋和右旋,以下借助圖來做形象的解釋和介紹 1.左旋 右子為軸,當前結點左旋 如上圖所示 當在某個結點pivot上,做左旋操作時,我們假設它的右孩子y不是nil t pivot可以為樹內任意右孩子而不是nil t 的結點。左旋以pivot到y之間的鏈為 支軸 進行,它使y成為該孩子樹新...
二叉樹左旋和右旋
樹的旋轉,分為左旋和右旋,以下借助圖來做形象的解釋和介紹 1.左旋 右子為軸,當前結點左旋 如上圖所示 當在某個結點pivot上,做左旋操作時,我們假設它的右孩子y不是nil t pivot可以為樹內任意右孩子而不是nil t 的結點。左旋以pivot到y之間的鏈為 支軸 進行,它使y成為該孩子樹新...