Leetcode刷题100天—226.翻转二叉树(二叉树)—day06

Posted 神的孩子都在歌唱

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode刷题100天—226.翻转二叉树(二叉树)—day06相关的知识,希望对你有一定的参考价值。

前言:

作者:神的孩子在歌唱
大家好,我叫运智

层序遍历

示例:

输入:

     4
   /   \\
  2     7
 / \\   / \\
1   3 6   9

输出:

 	 4
   /   \\
  7     2
 / \\   / \\
9   6 3   1

备注:
这个问题是受到 Max Howell 的 原问题 启发的 :

谷歌:我们90%的工程师使用您编写的软件(Homebrew),但是您却无法在面试时在白板上写出翻转二叉树这道题,这太糟糕了。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/invert-binary-tree
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

package 二叉树;

import java.util.LinkedList;
import java.util.Queue;


/*
 * 1
 * https://leetcode-cn.com/problems/invert-binary-tree/
 * 翻转一颗二叉树就是将其所有左右节点的左右子树都交换,也就是需要遍历所有节点,前序遍历
 */
public class _226_翻转二叉树<E> {
	public TreeNode invertTree(TreeNode root) {
//		前序遍历,先访问自己,在访问左右
		if (root==null) return root;
//		先遍历头节点的子树
		TreeNode tmp=root.left;
		root.left=root.right;
		root.right=tmp;
//		再用递归方法遍历左右子树,先遍历左或者右都没关系
		invertTree(root.left);
		invertTree(root.right);
		return root;
	}
	public TreeNode invertTree1(TreeNode root) {		
//		方法二:后序遍历,先访问左右,在访问自己
		if (root==null) return root;
//		先用递归方法遍历左右子树,先遍历左或者右都没关系
		invertTree(root.left);
		invertTree(root.right);
//		在将左右子树调换
		TreeNode tmp=root.left;
		root.left=root.right;
		root.right=tmp;

		return root;
	}
	public TreeNode invertTree2(TreeNode root) {
//		方法三:中序遍历,先访问左,在自己(头节点),在右
		if (root==null) return root;
//		先用递归方法遍历左子树
		invertTree(root.left);
		
//		在将左右子树调换
		TreeNode tmp=root.left;
		root.left=root.right;
		root.right=tmp;
//		这里注意不能写right,因为上边已经将左右子树调换了,right已经变成left了。
		invertTree(root.left);
		return root;
	}
	public TreeNode invertTree3(TreeNode root) {
//		方法四:层序遍历,从上到下,从左到右一次访问每一个节点
		if (root==null) return root;
//		创建队列,队列里面放节点TreeNode
		Queue<TreeNode> queue=new LinkedList<>();
//		将根节点入队
		queue.offer(root);
//		循环遍历,只要队列不为空,我就不断去除队列的头节点
		while(!queue.isEmpty()) {
//			出队
			TreeNode node=queue.poll();
//			System.out.print(node.element);
//			 将队头里面的元素左右交换
			TreeNode tmp=node.left;
			node.left=node.right;
			node.right=tmp;
//			如果发现左右节点有值就入队
			if(node.left!=null) {
				queue.offer(node.left);
			}
			if (node.right!=null) {
				queue.offer(node.right);
				
			}
		}
		return root;	
	}
		
		
}

本人csdn博客:https://blog.csdn.net/weixin_46654114
转载说明:跟我说明,务必注明来源,附带本人博客连接。

以上是关于Leetcode刷题100天—226.翻转二叉树(二叉树)—day06的主要内容,如果未能解决你的问题,请参考以下文章

Leetcode刷题100天—226.翻转二叉树(二叉树)—day06

LeetCode Java刷题笔记—226. 翻转二叉树

LeetCode刷题226-简单-翻转二叉树

java刷题--226翻转二叉树

leetcode226 翻转二叉树(Easy)

力扣(LeetCode)226. 翻转二叉树