目录
102.二叉树的层序遍历
给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。
思路:
需要定义一个队列来帮助实现,一层一层读取数据。
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
queue<TreeNode*> que;
if (root != NULL) que.push(root);
vector<vector<int>>result;
while( !que.empty()){
int size=que.size();
vector<int>vac;
for(int i=0;i<size;i++){
TreeNode *cur=que.front();
que.pop();
vac.push_back(cur->val);
if(cur->left) que.push(cur->left);
if(cur->right) que.push(cur->right);
}
result.push_back(vac);
}
return result;
}
};
226.翻转二叉树
给你一棵二叉树的根节点 root
,翻转这棵二叉树,并返回其根节点。
示例 1:
输入:root = [4,2,7,1,3,6,9] 输出:[4,7,2,9,6,3,1]
思路:
可以 使用多种方法,例如定义一个栈,使用递归,在前序遍历时的中节点调换一下。注意本题要求返回值为指针,所以不能调换数值,而是要调换指针节点,并且后序遍历不宜使用。
class Solution {
public:
TreeNode* invertTree(TreeNode* root) {
if( root ==NULL) return root;
stack<TreeNode*>st;
st.push(root);
while(! st.empty()){
TreeNode* node=st.top();
st.pop();
swap(node->left,node->right); //中
if(node->left) st.push(node->left);// 左
if(node->right) st.push(node->right);//右
}
return root;
}
};
101. 对称二叉树
给你一个二叉树的根节点 root
, 检查它是否轴对称。
示例 1:
输入:root = [1,2,2,3,4,4,3] 输出:true
思路:
定义一个函数,用于判断两个节点是否相等,列举出不相等的情况,再比较他们的下一层的左右节点是否相等。利用后序遍历。
class Solution {
public:
bool compare(TreeNode* left,TreeNode* right){
if(left==NULL && right !=NULL) return false;
else if(left !=NULL && right == NULL) return false;
else if(left==NULL && right ==NULL) return true;
else if(left->val != right->val) return false;
bool out= compare(left->left,right->right);
bool insude= compare(left->right,right->left);
bool middle=out&&insude;
return middle;
}
bool isSymmetric(TreeNode* root) {
if(root ==NULL) return true;
return compare(root->left,root->right);
}
};