1135 Is It A Red-Black Tree (30 分)
There is a kind of balanced binary search tree named red-black tree in the data structure. It has the following 5 properties:
- (1) Every node is either red or black.
- (2) The root is black.
- (3) Every leaf (NULL) is black.
- (4) If a node is red, then both its children are black.
- (5) For each node, all simple paths from the node to descendant leaves contain the same number of black nodes.
For example, the tree in Figure 1 is a red-black tree, while the ones in Figure 2 and 3 are not.
![]() |
![]() |
![]() |
---|---|---|
Figure 1 | Figure 2 | Figure 3 |
For each given binary search tree, you are supposed to tell if it is a legal red-black tree.
Input Specification:
Each input file contains several test cases. The first line gives a positive integer K (≤30) which is the total number of cases. For each case, the first line gives a positive integer N (≤30), the total number of nodes in the binary tree. The second line gives the preorder traversal sequence of the tree. While all the keys in a tree are positive integers, we use negative signs to represent red nodes. All the numbers in a line are separated by a space. The sample input cases correspond to the trees shown in Figure 1, 2 and 3.
Output Specification:
For each test case, print in a line “Yes” if the given tree is a red-black tree, or “No” if not.
Sample Input:
1 | 3 |
Sample Output:
1 | Yes |
作者: CHEN, Yue
单位: 浙江大学
时间限制: 400 ms
内存限制: 64 MB
代码长度限制: 16 KB
题目大意
给出一棵二叉树的前序遍历,要求判断是否为红黑树。红黑树的规则如下:
- 所有结点非红即黑
- 根结点为黑色
- 叶子结点(NULL结点)为黑色。
- 红色结点的孩子都是黑色
- 对于每一个结点,其到叶子结点的所有路径含有相同数目的黑色结点
分析
首先建立出树。使用map标记为红色的结点。判断是否为红黑树,主要判断2、4、5性质。首先判断根结点是否黑色。然后从根结点dfs,遇到红结点判断其孩子颜色是否全黑。然后判断左右子树上黑结点数是否相同。
代码
1 |
|