二叉樹的反轉,采用迭代,只能用前序和后序遍歷
/*** 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:TreeNode* invertTree(TreeNode* root) {if(root==NULL) return root;invertTree(root->left);//左 invertTree(root->right);//右swap(root->left,root->right);//中return root;}
};
二叉樹是否對稱,采用后序遍歷,左右中,判斷根節點兩個子樹是否相等
1.先判斷是否空,再判斷數值是否相等
2.如果可以,判斷子樹里側和外側是否相等
二叉樹的最大深度
深度指的是根節點到葉子節點的距離,從1開始,前序遍歷,中左右
高度是從葉子節點到根節點的距離,后序遍歷,左右中
/*** 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:int getdepth(TreeNode *node){if(node==NULL) return 0;int leftdep=getdepth(node->left);int rightdep=getdepth(node->right);int depth=1+max(leftdep,rightdep);return depth;}int maxDepth(TreeNode* root) {int depth= getdepth(root);return depth;}
};
二叉樹的最小深度,
葉子節點是左右孩子都為空,根節點到葉子節點的最小距離
/*** 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:int getdep(TreeNode* node){if(node==NULL) return 0;int leftdep=getdep(node->left);int rightdep=getdep(node->right);
//如果左孩子為空,說明不是葉子節點,返回右深度if(node->left==NULL&&node->right!=NULL){ return 1+rightdep;}if(node->left!=NULL&&node->right==NULL) return 1+leftdep;int res= 1+min(leftdep,rightdep);return res;}int minDepth(TreeNode* root) {return getdep(root);}
};