103.Binary Tree Zigzag Level Order Traversal

来源:互联网 发布:非线性最优化确定参数 编辑:程序博客网 时间:2024/05/01 14:29

103.Binary Tree Zigzag Level Order Traversal

Difficulty:medium

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,null,null,15,7],
3
/ \
9 20
/ \
15 7
return its zigzag level order traversal as: [ [3], [20,9], [15,7] ]

解题思路

此题是一道关于树这样一个数据结构的展示问题。理解清楚题目中的数据结构的构成,这道题应该是不难解决的。不过要较为注意的几点是,数据的储存方式在单双数行间顺序是不同的。于是要加入基础的判定来区别单双数行的储存。

过程中遇到较为麻烦的事情是因为对于树这个结构很久没有使用(大二上学期之后就没用过了lol),一度不知道该如何存储每一行的信息。不过在复习之后就基本有了思路。

具体思路是扫描搜索上一层的节点的分支之后统计一下具体数目(我用了size保存),在生成下一层的vector时记得判断清楚何时该层结束(利用size)。

另外一个问题在于如何反转vector,不过这个有现成的函数就可以直接使用就好,也即是reverse函数。接下来是具体代码。

具体代码

/** * Definition for a binary tree node. * struct TreeNode { *     int val; *     TreeNode *left; *     TreeNode *right; *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public:    vector<vector<int>> zigzagLevelOrder(TreeNode* root) {        queue<TreeNode*> temp;        vector<vector<int>> ans;        vector<int> temp_ans;        TreeNode* node;        if(root == NULL)        return ans;        temp.push(root);        bool judge = false;        while(!temp.empty())        {            int size = temp.size();            temp_ans.clear();            for(int i = 0;i < size;i++)            {                node = temp.front();                  temp.pop();                  temp_ans.push_back(node->val);                  if (node->left != NULL)                      temp.push(node->left);                  if (node->right != NULL)                      temp.push(node->right);            }            if(judge)            {                reverse(temp_ans.begin(),temp_ans.end());            }            judge = 1 - judge;            ans.push_back(temp_ans);        }        return ans;    }};
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 小米手机解不开图案锁怎么办 小米6无限重启怎么办 小米5一直显示mi怎么办 小米手机电池进入休眠状态怎么办 小米3s开不开机怎么办 小米n充电关机开机不了怎么办? 关机后强制刷机怎么办 红米手机开机画面怎么办 红米note1无法清理数据怎么办 红米2a密码忘记怎么办 线刷也不成功该怎么办 红米2开不了机怎么办 魅族无限重启怎么办 坚果pro无法双清怎么办 usb外置网卡网速慢怎么办? 无线路由器被改密码怎么办 电脑打不开flv格式的视频怎么办 电脑打不开pdf格式的文件怎么办 pdf格式在电脑上打不开怎么办 zip压缩的时候空间不足怎么办 电子发票填抬头错了怎么办 发票写错一个字怎么办 普票税率开错了怎么办 税率开错为17了怎么办 电子发票抬头错了怎么办 发票抬头错了一个字怎么办 5月税率开错了怎么办 如果发票是假的怎么办 发票收款人名字写错了怎么办 医院发票名字写错了怎么办 购买方发票联丢失怎么办 市中区超市办理发票怎么办 发票购买薄丢了怎么办 发票领用簿丢了怎么办 摩托车证扣12分怎么办 初中孩孑想扩展单词量怎么办 恒安保险倒闭了怎么办 小麦收割机卸粮筒总是转怎么办 非牛顿体结块了怎么办 非牛顿流体硬了怎么办 玩具枪子弹打到眼睛怎么办