https://leetcode-cn.com/problems/flatten-binary-tree-to-linked-list/

普通做法

  • 准备一个容器,把先序遍历的结果存放在里面,然后遍历这个容器的时候把当前节点左子节点置null, 右子节点就是下一个节点

image.png

  1. public void flatten(TreeNode root) {
  2. List<TreeNode> list = new ArrayList<>();
  3. preOrder(root, list);
  4. for (int i = 0; i < list.size() - 1; i++) {
  5. TreeNode node = list.get(i);
  6. node.left = null;
  7. node.right = list.get(i + 1);
  8. }
  9. }
  10. public void preOrder(TreeNode node, List<TreeNode> list) {
  11. if (node == null) {
  12. return;
  13. }
  14. list.add(node);
  15. preOrder(node.left, list);
  16. preOrder(node.right, list);
  17. }

Morris遍历做法(面试吹逼)