反转一棵二叉树

在这里插入图片描述
思路:首先按层访问二叉树,反转每个结点的左、右子树即可。我们可以使用队列完成按层访问的目的

//迭代实现
class Solution {
    
    
    public TreeNode invertTree(TreeNode root) {
    
    
        TreeNode p=root;
        if(root==null)
            return root;
        LinkedList<TreeNode> queue=new LinkedList<>();
        queue.add(p);
        while(!queue.isEmpty()){
    
    
        	int length=queue.size();
            for(int i=0;i<length;i++){
    
    
                TreeNode node = queue.poll();
                TreeNode temp=node.right;
                node.right=node.left;
                node.left=temp;
                if(node.left!=null)
                    queue.add(node.left);
                if(node.right!=null)
                    queue.add(node.right);
            }
        }
        return root;
    }
}

//递归实现
class Solution {
    
    
    public TreeNode invertTree(TreeNode root) {
    
    
        if(root==null)
            return root;
        TreeNode temp=root.left;
        root.left=root.right;
        root.right=temp;
        invertTree(root.left);
        invertTree(root.right);
        return root;
    }
}

猜你喜欢

转载自blog.csdn.net/qq_42451178/article/details/107130663