首页 > 其他分享 >226. 翻转二叉树 101. 对称二叉树

226. 翻转二叉树 101. 对称二叉树

时间:2023-02-04 11:36:56浏览次数:61  
标签:101 TreeNode val right 二叉树 226 null root left


226. 翻转二叉树

226. 翻转二叉树 101. 对称二叉树_算法

dfs:

/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public TreeNode invertTree(TreeNode root) {
if(root == null) return null;
f(root);
return root;
}
void f(TreeNode root){
if(root == null) return;
if(root.left != null && root.right != null){
TreeNode temp = root.left;
root.left = root.right;
root.right = temp;
}else if(root.left == null && root.right != null){
root.left = root.right;
root.right = null;
}else if(root.left != null && root.right == null){
root.right = root.left;
root.left = null;
}else{
return;
}
f(root.left);
f(root.right);
}
}

去掉代码冗余:

/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public TreeNode invertTree(TreeNode root) {
if(root == null) return null;
f(root);
return root;
}
void f(TreeNode root){
if(root == null) return;

TreeNode temp = root.left;
root.left = root.right;
root.right = temp;

f(root.left);
f(root.right);
}
}

226. 翻转二叉树 101. 对称二叉树_leetcode_02

101. 对称二叉树

226. 翻转二叉树 101. 对称二叉树_二叉树_03


此题目使用递归最简单

/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public boolean isSymmetric(TreeNode root) {
if(root==null||(root.left==null&&root.right==null)) return true;
return f(root.left,root.right);
}
public boolean f(TreeNode A,TreeNode B){
if(A ==null && B ==null){
return true;
}else if(A !=null && B ==null){
return false;
}else if(A ==null && B !=null){
return false;
}else if(A.val != B.val){
return false;
}
return f(A.left,B.right) && f(A.right,B.left);
}
}

226. 翻转二叉树 101. 对称二叉树_职场和发展_04


使用队列迭代法

/**
* 迭代法
* 使用普通队列
*/
public boolean isSymmetric3(TreeNode root) {
Queue<TreeNode> deque = new LinkedList<>();
deque.offer(root.left);
deque.offer(root.right);
while (!deque.isEmpty()) {
TreeNode leftNode = deque.poll();
TreeNode rightNode = deque.poll();
if (leftNode == null && rightNode == null) {
continue;
}
// if (leftNode == null && rightNode != null) {
// return false;
// }
// if (leftNode != null && rightNode == null) {
// return false;
// }
// if (leftNode.val != rightNode.val) {
// return false;
// }
// 以上三个判断条件合并
if (leftNode == null || rightNode == null || leftNode.val != rightNode.val) {
return false;
}
// 这里顺序与使用Deque不同
deque.offer(leftNode.left);
deque.offer(rightNode.right);
deque.offer(leftNode.right);
deque.offer(rightNode.left);
}
return true;
}


标签:101,TreeNode,val,right,二叉树,226,null,root,left
From: https://blog.51cto.com/u_15911055/6036993

相关文章

  • 二叉树的层次遍历
    文章目录​​二叉树的层次遍历​​​​二叉树的层次遍历​​​​107.二叉树的层序遍历II​​​​199.二叉树的右视图​​​​637.二叉树的层平均值​​​​429.N叉树的......
  • 二叉树
    二叉树二叉树的概念二叉树是n(n≥0)个结点的有限集或者是空集(n=O),或者由一个根结点及两棵互不相交的分别称作这个根的左子树和右子树的二叉树组成二叉树结构最简单......
  • 代码随想录算法训练营第十七天 | 110.平衡二叉树,257. 二叉树的所有路径,404.左叶子之和
    一、昨日回顾与补充今天看了Day16讲解的视频,对于求二叉树最大深度、最小深度以及求完全二叉树的节点个数有了新的理解,总结如下:1.深度和高度的区别(之前就看看定义忽略......
  • leetcode-二叉树展开为链表
    //leetcodesubmitregionbegin(Prohibitmodificationanddeletion)/***Definitionforabinarytreenode.*publicclassTreeNode{*intval;*TreeNodeleft;......
  • BM35 判断是不是完全二叉树
    思路:判断一个二叉树是不是完全二叉树,先弄清楚二叉树的定义,只有最后一层和倒数第一层有叶子结点,也就是说当访问到空节点时,后面不应该再有节点可访问了。即空节点一定是在......
  • 二叉树的遍历
    二叉树的遍历一、二叉树的遍历算法可以将二叉树的遍历分为:先序遍历(根、左、右),中序遍历(左、根、右),后序遍历(左、右、根)先序遍历动画(根、左、右)中序遍历......
  • BM26 求二叉树的层序遍历
    思路:逐层访问,通过访问当前层来得到下一层的节点。结束标志是下一层没有节点。Gopackagemainimport."nc_tools"/**typeTreeNodestruct{*Valint*Left......
  • 小白科普丨何为树、二叉树和森林?
    摘要:本文为大家带来树、二叉树和森林的表示及如何进行相互转换。本文分享自华为云社区《树、二叉树和森林的表示及相互转换》,作者:1+1=王。树的基本概念树的定义:树是n(n......
  • 【DFS】LeetCode 105. 从前序与中序遍历序列构造二叉树
    题目链接105.从前序与中序遍历序列构造二叉树思路先序遍历的顺序是根左右,中序遍历的顺序是左根右,所以在preorder数组中的首元素一定是当前树的树根,再从inorder数组......
  • 【DFS】LeetCode 236. 二叉树的最近公共祖先
    题目链接236.二叉树的最近公共祖先思路代码classSolution{publicTreeNodelowestCommonAncestor(TreeNoderoot,TreeNodep,TreeNodeq){if(roo......