leetcode151: symmetric tree

2024-05-06 08:38
文章标签 tree symmetric leetcode151

本文主要是介绍leetcode151: symmetric tree,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).

给定一颗二叉树,判断该二叉树是否是对称的。

For example, this binary tree is symmetric:

如下面的二叉树是对称的。

1/ \
2   2/     \
3       3

Note:
Bonus points if you could solve it both recursively and iteratively.

提示:是否可以同时用递归和迭代的方法解决?


方法一:递归

public class SymmetricTree {static class TreeNode {int val;TreeNode left;TreeNode right;TreeNode(int x) { val = x; }}public boolean isSymmetric(TreeNode root) {if(root == null) return true;return isSymmetric(root.left, root.right);}public boolean isSymmetric(TreeNode leftNode, TreeNode rightNode){if(leftNode == null && rightNode == null ) return true;if(leftNode == null || rightNode == null) return false;if(leftNode.val != rightNode.val) return  false;boolean isLeft = isSymmetric(leftNode.left, rightNode.right);boolean isRight = isSymmetric(leftNode.right, rightNode.left);return isLeft && isRight;}public static void main(String args[]){TreeNode root = new TreeNode(1);root.left = new TreeNode(2);root.right = new TreeNode(2);root.left.left = new TreeNode(3);root.left.right = new TreeNode(4);root.right.left = new TreeNode(4);root.right.right = new TreeNode(3);System.out.println(new SymmetricTree().isSymmetric(root));System.out.println(new SymmetricTree().isSymmetricIter(root));}
}

方法二:迭代

public boolean isSymmetricIter(TreeNode root) {if(root == null) return true;Stack<TreeNode> leftStack = new Stack<TreeNode>();Stack<TreeNode> rightStack = new Stack<TreeNode>();leftStack.push(root.left);rightStack.push(root.right);while (leftStack.size() > 0 && rightStack.size() > 0){TreeNode left = leftStack.pop();TreeNode right = rightStack.pop();if(left == null && right == null) continue;if(left == null || right == null) return false;if(left.val == right.val) {leftStack.push(left.right);leftStack.push(left.left);rightStack.push(right.left);rightStack.push(right.right);}else{return false;}}return true;}

这篇关于leetcode151: symmetric tree的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/963910

相关文章

玩转Web之easyui(二)-----easy ui 异步加载生成树节点(Tree),点击树生成tab(选项卡)

关于easy ui 异步加载生成树及点击树生成选项卡,这里直接给出代码,重点部分代码中均有注释 前台: $('#tree').tree({ url: '../servlet/School_Tree?id=-1', //向后台传送id,获取根节点lines:true,onBeforeExpand:function(node,param){ $('#tree').tree('options'

【C++PCL】点云处理Kd-tree原理

作者:迅卓科技 简介:本人从事过多项点云项目,并且负责的项目均已得到好评! 公众号:迅卓科技,一个可以让您可以学习点云的好地方 重点:每个模块都有参数如何调试的讲解,即调试某个参数对结果的影响是什么,大家有问题可以评论哈,如果文章有错误的地方,欢迎来指出错误的地方。 目录         1.原理介绍 1.原理介绍         kd-tree是散乱点云的一种储存结构,它是一种

[leetcode] 107. Binary Tree Level Order Traversal II

Binary Tree Level Order Traversal II 描述 Given a binary tree, return the bottom-up level order traversal of its nodes’ values. (ie, from left to right, level by level from leaf to root). For example

[leetcode] 102. Binary Tree Level Order Traversal

Binary Tree Level Order Traversal 描述 Given a binary tree, return the level order traversal of its nodes’ values. (ie, from left to right, level by level). For example: Given binary tree [3,9,20

[leetcode] 515. Find Largest Value in Each Tree Row

Find Largest Value in Each Tree Row 描述 You need to find the largest value in each row of a binary tree. Example: Input: 1/ \3 2/ \ \ 5 3 9 Output: [1, 3, 9] 我的代码 简单的dfs。 要使

[leetcode] 257. Binary Tree Paths

* Binary Tree Paths* 描述 Given a binary tree, return all root-to-leaf paths. For example, given the following binary tree: 1 / \ 2 3 \ 5 All root-to-leaf paths are: [“1->2->5”, “1->3”] 我的代码

论文《Tree Decomposed Graph Neural Network》笔记

【TDGNN】本文提出了一种树分解方法来解决不同层邻域之间的特征平滑问题,增加了网络层配置的灵活性。通过图扩散过程表征了多跳依赖性(multi-hop dependency),构建了TDGNN模型,该模型可以灵活地结合大感受场的信息,并利用多跳依赖性进行信息聚合。 本文发表在2021年CIKM会议上,作者学校:Vanderbilt University,引用量:59。 CIKM会议简介:全称C

515. Find Largest Value in Each Tree Row 在每个树行中找最大值

https://leetcode-cn.com/problems/find-largest-value-in-each-tree-row/description/ 思路: 和637. Average of Levels in Binary Tree(https://www.jianshu.com/p/814d871c5f6d)的思路基本相同.即层遍历二叉树,然后在每层中分别找最大的. vec

[CSU - 1811 (湖南省赛16)] Tree Intersection (dfs序维护子树+离线询问+树状数组)

CSU - 1811 (湖南省赛16) 给定一棵树,每个节点都有一个颜色 问割掉任意一条边,生成的两个子树中颜色集合的交集大小 这个是 dfs序处理子树 + 离线询问 + bit维护 的解法 首先问题转化为求解一个子树中有多少种颜色以及独有颜色的数量 用总的颜色数量减去独有颜色数量即为这棵子树的答案 先做一遍 dfs,再按 dfs序重新组建颜色序列 这样对子树的询问,就变成

[CSU - 1811 (湖南省赛16)] Tree Intersection (启发式合并)

CSU - 1811 (湖南省赛16) 给定一棵树,每个节点都有一个颜色 问割掉任意一条边,生成的两个子树中颜色集合的交集大小 问题可以转化为任意一棵子树中, 这个子树中的颜色数量和只在这个子树中出现的颜色的数量 用总的颜色数量减去独有颜色数量即为这棵子树的答案 从 lcy大爷那里学到了机智的启发式合并的做法 对每个点维护一个 map 来记录这个点为根的子树中颜色的及其数