leetcode-Binary Tree Level Order Traversal

来源:互联网 发布:网络挂号,厦门中医院 编辑:程序博客网 时间:2024/06/15 17:14

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]]

confused what "{1,#,2,3}" means? > read more on how binary tree is serialized on OJ.


OJ's Binary Tree Serialization:

The serialization of a binary tree follows a level order traversal, where '#' signifies a path terminator where no node exists below.

Here's an example:

   1  / \ 2   3    /   4    \     5
The above binary tree is serialized as "{1,2,3,#,#,4,#,#,5}".
二叉树层次遍历,可以用队列解决。
/** * 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) {        // IMPORTANT: Please reset any member data you declared, as        // the same Solution instance will be reused for each test case.        vector<vector<int> > ret;        vector<int> sameLevel;                if (root == NULL)            return ret;                    queue<NodeInfo> q;                NodeInfo nf(root, 0);                q.push(nf);                int depth = 0;                while (!q.empty()) {            nf = q.front();            sameLevel.clear();                        while (nf.depth == depth) {       // 遍历同一层次的节点                sameLevel.push_back((nf.nodePtr)->val);  //把节点值加入vector中                                if ((nf.nodePtr)->left != NULL)                    q.push(NodeInfo((nf.nodePtr)->left, depth+1));                                if ((nf.nodePtr)->right != NULL)                    q.push(NodeInfo((nf.nodePtr)->right, depth+1));                                      q.pop();                                if (q.empty())                    break;                                    nf = q.front();            }                        ret.push_back(sameLevel);   //把同一层次的数组加入ret中            ++depth;        }                //reverse(ret.begin(), ret.end());                return ret;    }private:    typedef struct NodeInfo {        TreeNode *nodePtr;        int depth;        NodeInfo(TreeNode *ptr, int dep):nodePtr(ptr), depth(dep)        {        }    }NodeInfo;};


原创粉丝点击