【每日编程-79期】二叉树展开为链表
今日问题:
给定一个二叉树,原地将它展开为链表。
例如,给定二叉树
1
/ \
2 5
/ \ \
3 4 6
将其展开为:
1
\
2
\
3
\
4
\
5
\
6
解决方法:
递归图解:
1 1 1
/ \ / \ \
2 5 -> 2 5 -> 2
/ \ \ \ \ \
3 4 6 3 6 3
\ \
4 4
\
5
\
6
C++代码:
非递归:
从根节点开始遍历
先判断左孩子是否存在
如存在,则将根节点和其右孩子断开,将左孩子及其子树一起连到原右孩子的位置,把原右孩子连到原左孩子最后面的右孩子后面。
非递归图解:
1 1 1
/ \ \ \
2 5 -> 2 -> 2
/ \ \ / \ \
3 4 6 3 4 3
\ \
5 4
\ \
6 5
\
6
C++代码:
C代码:
Java代码:
明日题目预告:
合并二叉树
给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。
你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。
示例 1:
输入:
Tree 1 Tree 2
1 2
/ \ / \
3 2 1 3
/ \ \
5 4 7
输出:
合并后的树:
3
/ \
4 5
/ \ \
5 4 7
注意: 合并必须从两个树的根节点开始。
更多编程题。
请至首页->每日系列->每日编程