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;} };
判断 左节点的左孩子 是否 和 右边节点 的 右孩子 是否相等 ,
左节点 的 右孩子 是否 和 右边节点 的 左孩子 是否 相等
同时相等 就是 对称二叉树