1.层序遍历 leetcode
一层层遍历二叉树 , 是广度优先搜索
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
queue< TreeNode* > que;
vector < vector < int > > result;
if ( root == NULL ) return result;
else que.push( root );
while ( !que.empty() ) {
int size = que.size();
vector < int > num;
while ( size-- ) {
TreeNode* cur = que.front();
que.pop();
num.push_back(cur -> val);
if ( cur -> left )que.push( cur -> left );
if ( cur -> right )que.push( cur -> right );
}
result.push_back(num);
}
return result;
}
};
注意 队列中 存的是链表的节点 不只是数
2.反转二叉树 leetcode
相当于 沿着 中间反转 过去
将每个节点的左右孩子进行反转
class Solution {
public:
TreeNode* invertTree(TreeNode* root) {
if ( root == NULL ) return root;
swap(root -> right, root -> left );
invertTree( root -> right );
invertTree ( root -> left );
return root;
}
};
3.对称二叉树leetcode
判段一个 二叉树 是否关于 中心轴 对称
class Solution { public: bool compare( TreeNode* left ,TreeNode* right ) { if(left == NULL && right == NULL ) return true; else if ( left == NULL && right != NULL ) return false; else if ( left != NULL && right == NULL ) return false; else if ( left -> val != right -> val ) return false; bool l = compare(left -> left,right -> right); bool r = compare( left -> right ,right -> left); bool result = l & r; return result; } bool isSymmetric(TreeNode* root) { bool result = compare( root -> left , root -> right ); return result; } };
判断 左节点的左孩子 是否 和 右边节点 的 右孩子 是否相等 ,
左节点 的 右孩子 是否 和 右边节点 的 左孩子 是否 相等
同时相等 就是 对称二叉树