binary-tree-level-order-traversal

来源:互联网 发布:怎么编程app 编辑:程序博客网 时间:2024/06/05 11:44

题目一:
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]
]

代码如下:

/** * Definition for binary tree * struct TreeNode { *     int val; *     TreeNode *left; *     TreeNode *right; *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {    public:    vector<vector<int> > levelOrder(TreeNode *root) {        vector<vector<int>> res;        vector<int> layer;        if(root==NULL)            return res;        queue<TreeNode*> que;        que.push(root);        //下面这两个变量很重要,nowNode指队列中的当前节点,lastNode指队列中的最后一个节点        TreeNode *nowNode=root;        TreeNode *lastNode=root;        while(!que.empty())        {            nowNode=que.front();            que.pop();            layer.push_back(nowNode->val);            if(nowNode->left)                que.push(nowNode->left);            if(nowNode->right)                que.push(nowNode->right);            //判断一层是否遍历完,相等则说明遍历完成            if(nowNode==lastNode)            {                res.push_back(layer);                lastNode=que.back();                layer.clear();            }        }        return res;    }};

题目二:
Given a binary tree, return the bottom-up level order traversal of its nodes’ values. (ie, from left to right, level by level from leaf to root).
For example:
Given binary tree{3,9,20,#,#,15,7},
3
/ \
9 20
/ \
15 7

return its bottom-up level order traversal as:
[
[15,7]
[9,20],
[3],
]

代码如下:只需要把上面一题得到的res最后reverse一下就可以了

/** * Definition for binary tree * struct TreeNode { *     int val; *     TreeNode *left; *     TreeNode *right; *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public:    vector<vector<int> > levelOrderBottom(TreeNode *root) {        vector<vector<int>> res;        vector<int> layer;        if(root==NULL)            return res;        queue<TreeNode*> que;        que.push(root);        //下面这两个变量很重要,nowNode指队列中的当前节点,lastNode指队列中的最后一个节点        TreeNode *nowNode=root;        TreeNode *lastNode=root;        while(!que.empty())        {            nowNode=que.front();            que.pop();            layer.push_back(nowNode->val);            if(nowNode->left)                que.push(nowNode->left);            if(nowNode->right)                que.push(nowNode->right);            //判断一层是否遍历完,相等则说明遍历完成            if(nowNode==lastNode)            {                res.push_back(layer);                lastNode=que.back();                layer.clear();            }        }        reverse(res.begin(),res.end());        return res;    }};

题目三:
Given a binary tree, return the zigzag level order traversal of its nodes’ values. (ie, from left to right, then right to left for the next level and alternate between).
For example:
Given binary tree{3,9,20,#,#,15,7},
3
/ \
9 20
/ \
15 7

return its zigzag level order traversal as:
[
[3],
[20,9],
[15,7]
]

代码如下:也是在第一题答案的最后进行稍微修改得到最后的结果
/**
* Definition for binary tree
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector

原创粉丝点击