給定紅黑樹,我需要編寫一個有效的算法,檢查是否爲每個節點,從節點到後代葉子的所有路徑包含相同數量的黑色節點,即算法應該返回一個布爾值,否則爲屬性爲true或false。如何檢查所有路徑的節點的黑色高度到它的派生樹葉?
2
A
回答
2
它將返回RB樹的黑色高度。如果高度爲0,則該樹是無效的紅黑樹。
int BlackHeight(NodePtr root)
{
if (root == NULL)
return 1;
int leftBlackHeight = BlackHeight(root->left);
if (leftBlackHeight == 0)
return leftBlackHeight;
int rightBlackHeight = BlackHeight(root->right);
if (rightBlackHeight == 0)
return rightBlackHeight;
if (leftBlackHeight != rightBlackHeight)
return 0;
else
return leftBlackHeight + root->IsBlack() ? 1 : 0;
}
+0
我不明白帶問號和冒號的最後一行的符號...你能澄清嗎? –
+0
這是一個[條件運算符。](http://en.wikipedia.org/wiki/%3F) – healthy
1
下面的代碼驗證是否沿任意路徑的黑色節點的數目是相同
#define RED 0
#define BLACK 1
struct rbt {
int data;
struct rbt *left;
struct rbt *right;
int parent_color; // parent link color
uint64_t nodes_count; // to store number of nodes present including self
int level; // to store level of each node
};
typedef struct rbt rbt_t;
int check_rbt_black_height(rbt_t *root)
{
if(!root) return 1;
else {
int left_height = check_black_violation(root->left);
int right_height = check_black_violation(root->right);
if (left_height && right_height && left_height != right_height) {
printf("Error: Black nodes are not same @level=%d\n", root->level);
exit(1);
}
if (left_height && right_height)
// do not increment count for red
return is_color_red(root) ? left_height : left_height + 1;
else
return 0;
}
}
int is_color_red(rbt_t *root)
{
if(root && root->parent_color == RED) return 1;
return 0;
}
相關問題
- 1. 計算從根到葉的所有路徑的所有節點
- 2. L葉節點的二叉樹高度
- 3. 查找從樹根到葉子的所有路徑在方案
- 4. 紅 - 紅 - 黑樹中具有特定黑高度的節點數
- 5. 如何獲取二進制樹的高度和根到葉子的路徑C
- 6. 如何使用Javascript獲取樹葉的所有路徑?
- 7. 檢索java的所有葉節點TreeMap
- 8. 充分利用根的所有路徑葉子節點
- 9. Prolog的樹節點路徑
- 10. 樹與節點或路徑的高度是多少?
- 11. Python(yield):樹中從葉到根的所有路徑
- 12. 獲取DOM樹中所有根到葉路徑的列表
- 13. 計數高度平衡樹的葉節點的計數函數
- 14. 如何獲取樹的所有葉節點?
- 15. 如何從任何父節點的所有葉子節點在樹上
- 16. 找到節點的路徑,樹C
- 17. 在樹中找到節點的路徑?
- 18. 檢查樹路徑中的節點的最佳算法?
- 19. 找到樹數據結構中所有葉節點的最高性能方法
- 20. 從節點檢索所有路徑
- 21. 文件節點添加到基於它的樹的路徑
- 22. 二叉樹中所有節點的深度總和(路徑長度)
- 23. Drupal - 按角色檢查所有站點路徑的安全
- 24. 紅黑樹的內部路徑長度
- 25. 檢查節點是否在有向圖的節點路徑中
- 26. 如何以最小複雜度檢查樹視圖中的所有節點
- 27. Java二叉搜索樹 - 計算到節點的路徑長度
- 28. Neo4j查找所有返回到同一節點的路徑
- 29. 紅黑樹 - 如何找到節點的父節點?
- 30. 在TreeView中查找從根到葉的所有路徑
您可以通過輕鬆的問題開始:如果它沒有被有效,就正確嗎? –