101. 对称二叉树
给你一个二叉树的根节点 root
, 检查它是否轴对称。
示例 1:
输入:root = [1,2,2,3,4,4,3] 输出:true
思路:对称二叉树 有一个特点是以 中左右顺序遍历左子树的结果会等于 中右左顺序遍历右子树的结果。则用递归的方式
/*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:bool isEquel(TreeNode* left,TreeNode* right){if(!left && !right) return true;else if(!left || !right) return false;if(left->val == right->val) {return isEquel(left->left,right->right) && isEquel(left->right,right->left);}else{return false;}}bool isSymmetric(TreeNode* root) {//左子树 中左右序 遍历的结果 = 右子树 中右左序 遍历的结果if(!root||!root->left&&!root->right) return true;if(!root->left || !root->right) return false;return isEquel(root->left,root->right);}
};
- 时间复杂度:这里遍历了这棵树,渐进时间复杂度为 O(n)。
111. 二叉树的最小深度
给定一个二叉树,找出其最小深度。
最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
说明:叶子节点是指没有子节点的节点。
示例 1:
输入:root = [3,9,20,null,null,15,7] 输出:2
思路:题目中是要求找 到叶子节点(左 右子节点为nullptr)的最小深度,并不是空节点的最小深度。
可以用深度优先遍历该树,每次到叶子节点则进行最小值的迭代判断。
细节:引入记录当前深度和最小值的 变量
/*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:void findMinDepth(TreeNode* root,int& depth,int& cur){if(!root) return;else if(!root->left && !root->right){depth=min(depth,cur+1);}cur++;findMinDepth(root->left,depth,cur);findMinDepth(root->right,depth,cur);cur--;return;}int minDepth(TreeNode* root) {if(root){int depth=INT_MAX;int cur=0;findMinDepth(root,depth,cur);return depth;}else return 0;}
};
-
时间复杂度:O(N),其中 N是树的节点数。对每个节点访问一次。