原题链接:114. 二叉树展开为链表 - 力扣(LeetCode)
解决思路:
说白了其实就是将二叉树序列化,并且采用先序序列,也就是只需要通过先序遍历递归方式,将遍历到的节点存入list即可,然后将得到的list遍历,使得每个元素的right指向下一个元素即可。
完整代码:
class Solution {
public void flatten(TreeNode root) {
List<TreeNode> list = new ArrayList<TreeNode>();
preorderTraversal(root, list);
int size = list.size();
for (int i = 1; i < size; i++) {
TreeNode prev = list.get(i - 1), curr = list.get(i);
prev.left = null;
prev.right = curr;
}
}
public void preorderTraversal(TreeNode root, List<TreeNode> list) {
if (root != null) {
list.add(root);
preorderTraversal(root.left, list);
preorderTraversal(root.right, list);
}
}
}