先簡單陳述一下題目,先給乙個總個數,之後給乙個數節點個數和這個樹的前序遍歷,最後讓輸出這個數是不是紅黑樹
紅黑樹要求
1.根節點為黑
2.葉子(null)為黑
3.紅點的兒子為黑
4.每乙個節點左右樹下面黑點數量必須同
其實一看只給前序遍歷有點慌,但是勿慌,因為這是平衡二叉樹,所以完全可以根據連續遍歷然後往裡面插入資料,直接建樹
最後卡在了怎麼計算左右樹中的黑點上,最後參考了網上才過的,不得不說自己還需努力啊
int n, s = -1;
bool pan = true;
struct no ;
struct no* inst(int s,no *head)
else
}else
return head;
}void search(no *root)
if (root->n > 0) //計算每個點左右的黑點是否相等
if (root->n < 0)
if (root->ln != root->rn)
}int main(void)
if (head->n < 0)
search(head);
if (pan == false)
printf("no\n");
else
printf("yes\n");
}return 0;
}
平衡二叉樹 紅黑樹
顏色調整,第一種情況uncle存在且為紅色,第二種和第三種情況,uncle不存在 uncle存在且為黑色,先處理第三種情況,針對parent進行左單旋。test.cpp include using namespace std enum colour template struct rbtreenod...
紅黑樹與平衡二叉樹
性質1.節點是紅色或黑色。性質2.根節點是黑色。性質3.每個葉子節點都是黑色的空節點 nil節點 性質4 每個紅色節點的兩個子節點都是黑色。從每個葉子到根的所有路徑上不能有兩個連續的紅色節點 性質5.從任一節點到其每個葉子的所有路徑都包含相同數目的黑色節點。這些約束強制了紅黑樹的關鍵性質 從根到葉子...
二叉查詢樹 平衡二叉樹 紅黑樹
先看幾個基本概念 樹 由根出發,指向n個孩子,孩子再指向孫子。這樣一種資料結構 二叉樹 每個接點最多有兩個孩子的樹 二叉查詢樹 每個結點的左子樹 結點 右子樹 平衡二叉樹 每個結點左右子樹的高度差不大於1 紅黑樹 從任一節點到其每個葉子的所有簡單路徑 都包含相同數目的黑色節點。當然還有其它性質 幾點...