树第1天

63 阅读1分钟

第1天

226. 翻转二叉树

class Solution {
    public TreeNode invertTree(TreeNode root) {
        if(root == null)
            return root;
        TreeNode t = root.left;
        root.left = root.right;
        root.right = t;
        invertTree(root.left);
        invertTree(root.right);

        return root;
    }
}

116. 填充每个节点的下一个右侧节点指针

class Solution {
    public Node connect(Node root) {
        if(root == null)
            return root;
        connection(root.left, root.right);
        return root;
    }

    void connection(Node left, Node right){
        if(left == null || right == null)
            return;
        left.next = right;
        connection(left.left, left.right);
        connection(right.left, right.right);
        connection(left.right, right.left);
    }
}

114. 二叉树展开为链表

class Solution {
    public void flatten(TreeNode root) {
        if(root == null)
            return;
        flatten(root.left);
        flatten(root.right);

        TreeNode left = root.left;
        TreeNode right = root.right;
        root.right = left;
        root.left = null;

        TreeNode t = root;
        while(t.right != null)
            t = t.right;
        t.right = right;
    }
}
class Solution {
    public void flatten(TreeNode root) {
        TreeNode cur = root;

        while(cur != null){
            if(cur.left != null){
                TreeNode left = cur.left;
                while(left.right != null)
                    left = left.right;
                left.right = cur.right;
                cur.right = cur.left;
                cur.left = null;
            }
            cur = cur.right;
        }
    }
}