博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
107. Binary Tree Level Order Traversal II
阅读量:6256 次
发布时间:2019-06-22

本文共 2415 字,大约阅读时间需要 8 分钟。

107. Binary Tree Level Order Traversal II

题目

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

解析

  • 题目虽然思路很清晰,但是查看了方法2,3感觉也吸收了很多思路!
// Binary Tree Level Order Traversal IIclass Solution_107 {public:    //bfs    vector
> levelOrderBottom(TreeNode* root) { vector
> vecs; stack
> sta; if (!root) { return vecs; } queue
que; que.push(root); while (!que.empty()) { int size = que.size(); vector
vec; TreeNode* temp; for (int i = 0; i < size;i++) { temp = que.front(); que.pop(); vec.push_back(temp->val); if (temp->left) { que.push(temp->left); } if (temp->right) { que.push(temp->right); } } sta.push(vec); } // reverse(res.begin(),res.end()); while (!sta.empty()) { vector
vec = sta.top(); sta.pop(); vecs.push_back(vec); } return vecs; } // 记录每层的个数;curCount当前层个数,nextCount下一层个节点个数 vector
> levelOrderBottom1(TreeNode* root) { int curCount = 0, nextCount = 0, level = 0; vector
> ret; if (!root) return ret; curCount = 1; queue
q; q.push(root); ret.push_back(vector
(0, curCount)); while (!q.empty()) { if (curCount == 0) { curCount = nextCount; nextCount = 0; level++; ret.push_back(vector
(0, curCount)); //初始化下一层vector的大小 } TreeNode *node = q.front(); q.pop(); curCount--; ret[level].push_back(node->val); //在同一层的节点加入 if (node->left) { nextCount++; q.push(node->left); } if (node->right) { nextCount++; q.push(node->right); } } reverse(ret.begin(), ret.end()); return ret; } //dfs int getHeight(TreeNode *root) { if (!root) return 0; return max(getHeight(root->left), getHeight(root->right)) + 1; } vector
> levelOrderBottom2(TreeNode *root) { if (!root) return vector
>(); vector
> res(getHeight(root), vector
()); dfs(root, res.size() - 1, res); return res; } void dfs(TreeNode *root, int height, vector
> &res) { if (!root) return; res[height].push_back(root->val); dfs(root->left, height - 1, res); dfs(root->right, height - 1, res); }};

题目来源

转载地址:http://irtsa.baihongyu.com/

你可能感兴趣的文章
java 单例模式浅析
查看>>
Codeforces Round #389 (Div. 2,) B C
查看>>
python中configparser模块记录
查看>>
IIIDX[九省联考2018]
查看>>
Protobuf3 序列化
查看>>
C语言面试题大汇总
查看>>
JavaSE-List常用方法
查看>>
json 和 pickel 详解
查看>>
Linux基础命令之grep
查看>>
python自动化开发-7
查看>>
使用VS2010+SVN出現的問題
查看>>
谁说Javascript简单的?
查看>>
UVA 1374 Power Calculus
查看>>
表结构更改后或新增加数据后同步到表中
查看>>
软媒魔方u盘装系统
查看>>
python中的文件操作小结1
查看>>
ggplot2 geom设置—散点图
查看>>
inotify+rsync 实时同步目录文件
查看>>
eclipse中debug
查看>>
山寨百度之学习笔记
查看>>