普通树转二叉树:左儿子右兄弟表示法

  这两天在吃力地学DP的优化,被虐地不行不行的。搞个小插曲。

  左儿子右兄弟,顾名思义,是一棵转换后的树,它是一棵二叉树,一个节点的左子树表示的是原树中这个节点的子节点,一个节点的右子树表示的是这个节点在原树中的兄弟(父节点相同的点)。

  这么表示有什么好处呢?在DP时二叉树的优势相比于普通树是很明显的,或许有时它不能优化时间,但至少可以优化“思路”。

  最近并没有碰到要转二叉树的题,也没什么题解可写,等碰到了再补充吧,现在先把模板贴在这里喽。直接递归建树即可,原树是用vector保存的。

void dfs(int u){
	if(!u || !G[u].size()) return;
	lc[u] = G[u][0];
	dfs(lc[u]);
	int v = lc[u];
	for(int i = 1; i < G[u].size(); i++){
		rc[v] = G[u][i];
		dfs(rc[v]);
		v = rc[v];
	}
}

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值