二叉树展开为链表

303 阅读1分钟

题目

image.png

递归

class Solution {
    public void flatten(TreeNode root) {
        digui(root);
    }


    private TreeNode digui(TreeNode root) {
        if (root == null) {
            return null;
        }

        TreeNode left = digui(root.left);
        TreeNode right = digui(root.right);
        root.left = null;
        if (left != null) {
            root.right = left;
            TreeNode temp = left;
            while (temp.right != null) {
                temp = temp.right;
            }
            temp.right = right;
        } else if (right != null) {
            root.right = right;
        }

        return root;


    }
}

思路

(1) 先序遍历,

(2) 先设置左节点, 在设置右节点的时候, 一定要设置到左节点对应链表的最后位置, 而不是设置到左节点的头部