【Leetcode】【Easy】Symmetric Tree
发布日期:2021-08-16 13:28:06 浏览次数:53 分类:技术文章

本文共 2403 字,大约阅读时间需要 8 分钟。

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  4 4  3

But the following is not:

1   / \  2   2   \   \   3    3

Note:

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

 

递归的解法:

新建一个递归调用自身的函数,输入是待比较的左结点和右结点,输出是对称判定结果:true or false;

 

1 class Solution { 2 public: 3     bool isSymmetric(TreeNode *root) { 4         if (!root) 5             return true; 6              7         return isSame(root->left, root->right); 8          9     }10     11     bool isSame(TreeNode *node_l, TreeNode *node_r){12         if (!node_l && !node_r)13             return true;14         15         if (!node_l || !node_r)16             return false;17         18         if (node_l->val != node_r->val){19             return false;20         }21         22         return isSame(node_l->left, node_r->right) && \23             isSame(node_l->right, node_r->left);24     }25     26 };

 

迭代的解法: 

新建两个栈用于存放待比较的左子树结点和右子树结点。每次迭代拿出两个栈中同位置元素进行比较,结束后删除此比较过的元素,并将其左右儿子压栈待比较。(还有只用一个栈的方法,并没有节省空间,略)

 

1 class Solution { 2 public: 3     bool isSymmetric(TreeNode *root) { 4         if (!root) 5             return true; 6              7         stack
leftNodeStack; 8 stack
rightNodeStack; 9 leftNodeStack.push(root->left);10 rightNodeStack.push(root->right);11 TreeNode *leftNode;12 TreeNode *rightNode;13 14 while (!leftNodeStack.empty()) {15 leftNode = leftNodeStack.top();16 rightNode = rightNodeStack.top();17 leftNodeStack.pop();18 rightNodeStack.pop();19 20 if (!leftNode && !rightNode) {21 continue;22 }23 24 if ((!leftNode && rightNode) || \25 (leftNode && !rightNode)) {26 return false;27 }28 29 if (leftNode->val != rightNode->val) { 30 return false;31 }32 33 leftNodeStack.push(leftNode->left);34 leftNodeStack.push(leftNode->right);35 rightNodeStack.push(rightNode->right); // Notice36 rightNodeStack.push(rightNode->left);37 }38 return true;39 }40 };

 

转载于:https://www.cnblogs.com/huxiao-tee/p/4117731.html

转载地址:https://blog.csdn.net/weixin_30807779/article/details/98248273 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:030 平安面试小节
下一篇:代码规范须知_V1.0_20140703

发表评论

最新留言

能坚持,总会有不一样的收获!
[***.219.124.196]2024年04月07日 19时23分10秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

用IOT的思维来管理我们的查看我们重要业务的服务器健康状态。-概述篇 2019-04-26
用IOT的思维来管理我们的查看我们重要业务的服务器健康状态-Azure配置篇! 2019-04-26
用IOT的思维来管理我们的查看我们重要业务的服务器健康状态-Powershell模块配置篇! 2019-04-26
用IOT的思维来管理我们的查看我们重要业务的服务器健康状态-将IOT设备注册到设备中心! 2019-04-26
用IOT的思维来管理我们的查看我们重要业务的服务器健康状态-Powershell脚本编写-发送脚本解析! 2019-04-26
用IOT的思维来管理我们的查看我们重要业务的服务器健康状态-接受消息脚本编写! 2019-04-26
用IOT的思维来管理我们的查看我们重要业务的服务器健康状态-脚本功能性测试! 2019-04-26
流批一体神器 Flink 已成气候!!! Spark 这下彻底没戏了? 2019-04-26
手绘关联规则挖掘算法 2019-04-26
砖厂新鲜出炉的 Spark 3.1.1香在哪? 2019-04-26
京东金融大数据平台架构(附82页PPT) 2019-04-26
大数据平台数据治理与建设方案(附84页PPT) 2019-04-26
美团优选大数据开发岗面试真题-附答案详细解析 2019-04-26
零基础应该怎么学java编程? 2019-04-26
初学者学java所遇到的问题 2019-04-26
初学java----jdk环境变量的配置 2019-04-26
初学者如何快速搭建一个springboot框架 2019-04-26
适合java初级工程师找工作的项目 2019-04-26
适合java初学者的几个自学网站 2019-04-26
java初学者面试题 2019-04-26