8 月 2 日签到题,题目如下:
给定一个二叉树,原地将它展开为一个单链表。
例如,给定二叉树
1 / \ 2 5 / \ \ 3 4 6将其展开为:
1 \ 2 \ 3 \ 4 \ 5 \ 6
依照题意以及示例,即前序遍历每次将右节点接到左节点的右叶子节点,然后把左节点替换到右节点的位置,即获得结果。
复杂度分析:
遍历所有节点,时间复杂度为 O(N);
每次遍历使用一个临时值记录右节点,空间复杂度为 O(N)。
以下为自己提交的代码:
public class Solution {
public void Flatten(TreeNode root) {
if (root == null) return;
Flatten(root.left);
Flatten(root.right);
TreeNode temp = root.right;
root.right = root.left;
root.left = null;
while (root.right != null)
{
root = root.right;
}
root.right = temp;
}
}