leetcodey -day25 Binary Tree Level Order Traversal & Symmetric Tree & Same Tree

来源:互联网 发布:php日志文件在哪 编辑:程序博客网 时间:2024/06/05 04:46
1、


Binary Tree Level Order Traversal

Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, level by level).

For example:
Given binary tree {3,9,20,#,#,15,7},

    3   / \  9  20    /  \   15   7

return its level order traversal as:

[  [3],  [9,20],  [15,7]]

class Solution {public:    vector<vector<int> > levelOrder(TreeNode *root) {        vector<vector<int> > result;        queue<TreeNode*> nodeLevel;        queue<TreeNode*> newNodeLevel;        vector<int> nodeVec;        if(root){            nodeLevel.push(root);            while(!nodeLevel.empty()){                nodeVec.clear();                 while(!nodeLevel.empty()){                    TreeNode* node = nodeLevel.front();                    nodeLevel.pop();                    nodeVec.push_back(node->val);                    if(node->left){                        newNodeLevel.push(node->left);                    }                    if(node->right){                        newNodeLevel.push(node->right);                    }                }                if(!nodeVec.empty()){                    result.push_back(nodeVec);                }                nodeLevel.swap(newNodeLevel);            }        }        return result;    }};

2、Symmetric Tree

Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).

For example, this binary tree is symmetric:

    1   / \  2   2 / \ / \3  4 4  3

But the following is not:

    1   / \  2   2   \   \   3    3

分析:对于二叉树一般采用递归的方法,判断是否是镜像映射,可以采用判断对应的左子树是否和右子树相同的方法来进行判断。

class Solution {public:    bool isSymmetric(TreeNode *root) {        if(!root){            return true;        }        return isSame(root->left,root->right);    }    bool isSame(TreeNode* root1, TreeNode* root2){        if(!root1 && !root2){            return true;        }        if(root1 && root2){            if(root1->val != root2->val){                return false;            }            bool isLeft = isSame(root1->left,root2->right);            bool isRight = isSame(root1->right,root2->left);            if(isLeft && isRight){                return true;            }        }        return false;    }};

3、Same Tree 

Given two binary trees, write a function to check if they are equal or not.

Two binary trees are considered equal if they are structurally identical and the nodes have the same value.

class Solution {public:    bool isSameTree(TreeNode *p, TreeNode *q) {        if(!p && !q){            return true;        }        if(p && q){            if(p->val != q->val){                return false;            }            bool isLeft = isSameTree(p->left,q->left);            bool isRight = isSameTree(p->right,q->right);            if(isLeft && isRight){                return true;            }        }        return false;    }};


0 0