[leetcode]107.Binary Tree Level Order Traversal II

来源:互联网 发布:java context 编辑:程序博客网 时间:2024/06/18 04:36

【题目】

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

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


【代码】

/**********************************   日期:2014-10-16*   作者:SJF0115*   题号: Binary Tree Level Order Traversal II *   来源:https://oj.leetcode.com/problems/binary-tree-level-order-traversal-ii/*   结果:AC*   来源:LeetCode*   总结:**********************************/#include <iostream>#include <malloc.h>#include <vector>#include <queue>using namespace std;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> > vec;        vector<int> v;        if(root == NULL){            return vec;        }        queue<TreeNode*> q;        q.push(root);        //当前层的个数        int count = 1;        //下一层的个数        int nextCount = 0;        while(!q.empty()){            //取队列头元素            TreeNode* p = q.front();            //存储元素            v.push_back(p->val);            q.pop();            count--;            //左右子节点            if(p->left){                q.push(p->left);                nextCount++;            }            if(p->right){                q.push(p->right);                nextCount++;            }            //一层访问完毕            if(count == 0){                count = nextCount;                nextCount = 0;                vec.insert(vec.begin(),v);                v.clear();            }        }        return vec;    }};//按先序序列创建二叉树int CreateBTree(TreeNode* &T){    char data;    //按先序次序输入二叉树中结点的值(一个字符),‘#’表示空树    cin>>data;    if(data == '#'){        T = NULL;    }    else{        T = (TreeNode*)malloc(sizeof(TreeNode));        //生成根结点        T->val = data-'0';        //构造左子树        CreateBTree(T->left);        //构造右子树        CreateBTree(T->right);    }    return 0;}int main() {    Solution solution;    TreeNode* root(0);    CreateBTree(root);    vector<vector<int> > v = solution.levelOrderBottom(root);    for(int i = 0;i < v.size();i++){        for(int j = 0;j < v[i].size();j++){            cout<<v[i][j];        }        cout<<endl;    }}//13#5##49###


1 0
原创粉丝点击