博主头像
7024w的自留地

觉宇宙之无穷,识盈虚之有数

Leetcode 226. 翻转二叉树

需要注意的事,二叉树有类似指针的玩意,即图中第一次交换第二层的数据时,事连着下面的一起交换。

AA49B9538CCB55E81E84580BDDD0CDFF.png
AA49B9538CCB55E81E84580BDDD0CDFF.png

1.递归解法

public TreeNode invertTree(TreeNode root) {
    if(root == null){
        return root;
    }
    TreeNode left = root.left;
    root.left = root.right;
    root.right = left;
    invertTree(root.left);
    invertTree(root.right);
    return root;
}

2.迭代解法(广度优先搜索)

public TreeNode invertTree(TreeNode root) {
    if(root==null) {
        return null;
    }
    //将二叉树中的节点逐层放入队列中,再迭代处理队列中的元素
    LinkedList<TreeNode> queue = new LinkedList<TreeNode>();
    queue.add(root);
    while(!queue.isEmpty()) {
        //每次都从队列中拿一个节点,并交换这个节点的左右子树
        TreeNode tmp = queue.poll();
        TreeNode left = tmp.left;
        tmp.left = tmp.right;
        tmp.right = left;
        //如果当前节点的左子树不为空,则放入队列等待后续处理
        if(tmp.left!=null) {
            queue.add(tmp.left);
        }
        //如果当前节点的右子树不为空,则放入队列等待后续处理
        if(tmp.right!=null) {
            queue.add(tmp.right);
        }
        
    }
    //返回处理完的根节点
    return root;
}

发表新评论