[TK] 三色二叉树 hzoi-tg#282 存图方法
可以发现,假如在序列中遇到一个数为 \(2\) ,也就是有两个子节点,那么接下来的全部数字都是描述左树的,一直到左树被遍历完成. 这让你想到了什么? 当然是DFS啦.
根据DFS我们有下面这样的存图思路:
- 假如遇到 \(2\) ,新建一个节点,分别对这个节点递归左右子树
- 假如遇到 \(1\) ,新建一个节点,对这个节点递归左子树
- 假如遇到 \(0\) ,新建一个节点然后返回
代码是这样的:
void buildtree(string x,int id){
if(x[id-1]=='1'){
node[id].lc=++cnt;
buildtree(x,cnt);
}
else if(x[id-1]=='2'){
node[id].lc=++cnt;
buildtree(x,cnt);
node[id].rc=++cnt;
buildtree(x,cnt);
}
}