Problem
Given a table tree, id is identifier of the tree node and p_id is its parent node’s id.
|
|
Each node in the tree can be one of three types:
- Leaf: if the node is a leaf node.
- Root: if the node is the root of the tree.
- Inner: If the node is neither a leaf node nor a root node.
Write a query to print the node id and the type of the node. Sort your output by the node id. The result for the above sample is:
|
|
Explanation
- Node ‘1’ is root node, because its parent node is NULL and it has child node ‘2’ and ‘3’.
- Node ‘2’ is inner node, because it has parent node ‘1’ and child node ‘4’ and ‘5’.
- Node ‘3’, ‘4’ and ‘5’ is Leaf node, because they have parent node and they don’t have child node.
And here is the image of the sample tree as below:
|
|
Note
If there is only one node on the tree, you only need to output its root attributes.
Analysis
Given a node, we can check if it is a root first, if not, check whether it is inner or leaf.
A node is root if its parent id is null:
|
|
For a non-root node, if it is parent node of some other nodes, it should be inner, otherwise leaf:
|
|
At last, sort result by id:
|
|
Solution
|
|
Link
608. Tree Node
(中文版) SQL 笔记: Leetcode#608 Tree Node
近期评论