101. Symmetric Tree
来源:互联网 发布:嗟乎,此真将军矣 编辑:程序博客网 时间:2024/06/06 08:33
题目:Symmetric Tree
题目叙述
原题链接:https://leetcode.com/problems/symmetric-tree/#/description
Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).
For example, this binary tree [1,2,2,3,4,4,3] is symmetric:
But the following [1,2,2,null,3,null,3] is not:
给出一个二叉树,判断它是不是自己的镜像(即按照中间对称)。
思路
递归写法
先判断节点是不是空,然后分别判断左子树的左和右子树的右是否相等,以及左子树的右和右子树的左孩子是否相等。
参考代码
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: bool isSymmetric(TreeNode* root) { if(!root) return true; return isOk(root->left, root->right); }private: bool isOk(TreeNode* left, TreeNode* right) { if(!left && !right) return true; if(left == NULL) return false; if(right == NULL) return false; return (left->val == right->val) && isOk(left->left, right->right) && isOk(left->right, right->left); }};
非递归写法
用两个队列分别层序遍历二叉树,一个从左到右遍历,一个从右到左遍历,每次判断两个队列中的当前节点q1, q2, 判断q1和q2的值是否相等,判断q1和q2是不是同时有镜相对称的子树.
参考代码
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: bool isSymmetric(TreeNode* root) { if(!root) return true; queue<TreeNode*> qL; queue<TreeNode*> qR; qL.push(root); qR.push(root); while(!qL.empty() && !qR.empty()) { TreeNode* frontL = qL.front(); TreeNode* frontR = qR.front(); qL.pop(), qR.pop(); if(frontL->val != frontR->val) return false; if((frontL->left && !frontR->right) || (frontL->right && !frontR->left)) return false; if(frontL->left && frontR->right) { qL.push(frontL->left); qR.push(frontR->right); } if(frontL->right && frontR->left) { qL.push(frontL->right); qR.push(frontR->left); } } return true; }};
0 0
- LeetCode 101. Symmetric Tree
- [LeetCode]101.Symmetric Tree
- 【LeetCode】101.Symmetric Tree
- [Leetcode] 101. Symmetric Tree
- LeetCode --- 101. Symmetric Tree
- [leetcode] 101.Symmetric Tree
- 101.Symmetric Tree
- 101. Symmetric Tree
- LeetCode : 101. Symmetric Tree
- [leetcode]101.Symmetric Tree
- Leetcode 101. Symmetric Tree
- 101. Symmetric Tree
- 101. Symmetric Tree
- 101. Symmetric Tree LeetCode
- 101. Symmetric Tree
- 101. Symmetric Tree
- 101. Symmetric Tree
- [LeetCode]101. Symmetric Tree
- 2016年总结
- 一维数组
- JSON
- 使用idea自定义代码段
- JDK中的proxy动态代理原理剖析
- 101. Symmetric Tree
- dubbo-admin构建报错
- yaf框架学习第一篇hello world
- 【LeetCode】6. ZigZag Conversion
- React Native中的网络请求fetch和简单封装
- 找出N个整数中最大的K个数
- Spring中Bean的管理及ApplicationContext的使用
- 每日练习(13)
- bubblesort 冒泡排序 java