LeetCode114二叉树展开为链表(递归)

题目
在这里插入图片描述

递归保存当前结点的左右结点,遇到的左结点直接拼到右节点,左节点遍历完之后回溯,找到当前最底层的右结点,再将右节点拼接过去。两个版本
一 有返回值

    public TreeNode build(TreeNode root){
    
    
        if (root == null) return null;
        TreeNode left = root.left;
        TreeNode right = root.right;
        root.left = null;
        root.right = build(left);
        TreeNode tmp = root;
        while (tmp.right != null) tmp = tmp.right;
        tmp.right = build(right);
        return root;
    }
    public void flatten(TreeNode root) {
    
    
        build(root);
    }

无返回值

    public void flatten(TreeNode root) {
    
    
        if (root == null) return;
        TreeNode left = root.left;
        TreeNode right = root.right;
        root.left = null;
        root.right = left;
        flatten(left);
        TreeNode tmp = root;
        while (tmp.right != null) tmp = tmp.right;
        tmp.right = right;
        flatten(right);
    }

猜你喜欢

转载自blog.csdn.net/qq_43434328/article/details/115102564