Populating Next Right Pointers in Each Node II 题解

原创文章,拒绝转载

题目来源:https://leetcode.com/problems/populating-next-right-pointers-in-each-node-ii/description/


Description

Follow up for problem "Populating Next Right Pointers in Each Node".

What if the given tree could be any binary tree? Would your previous solution still work?

Note: You may only use constant extra space.

Example

Given the following binary tree,


1
/ \
2 3
/ \ \
4 5 7

After calling your function, the tree should look like:


1 -> NULL
/ \
2 -> 3 -> NULL
/ \ \
4-> 5 -> 7 -> NULL

Solution


class Solution {
private:
void connectNode(vector<TreeLinkNode*>& v) {
int size = v.size();
for (int i = 0; i <= size - 2; i++) {
v[i] -> next = v[i + 1];
}
} struct LevelNode {
TreeLinkNode* node;
int level;
LevelNode(TreeLinkNode* n, int l) {
node = n;
level = l;
}
}; const int InitLevel = 1;
public:
void connect(TreeLinkNode *root) {
if (root == NULL)
return;
int curLevel = InitLevel;
vector<TreeLinkNode*> v;
queue<LevelNode> q;
q.push(LevelNode(root, InitLevel));
while (!q.empty()) {
LevelNode ln = q.front();
q.pop();
if (ln.node -> left != NULL) {
q.push(LevelNode(ln.node -> left, ln.level + 1));
}
if (ln.node -> right != NULL) {
q.push(LevelNode(ln.node -> right, ln.level + 1));
}
if (ln.level != curLevel) {
connectNode(v);
v.clear();
curLevel++;
}
v.push_back(ln.node);
}
connectNode(v);
}
};

解题描述

这道题是Populating Next Right Pointers in Each Node的升级版:这道题里面的二叉树不是完全二叉树,所以每一层的节点数目没有办法提前计算。我想到的算法是,使用一个新的结构体来记录队列中的节点,然后这个结构体中包含另外一个属性——即层次编号。通过层次编号来区分不同层次的节点,在层次编号发生变化的时候对当前层次记录表中的节点进行next连接即可。

最新文章

  1. .NET Core也可以使用MongoDB了
  2. DropDownList
  3. 从零搭建mongo分片集群的简洁方法
  4. C#中this在扩展方法的应用
  5. &lt;转&gt;详解DNS的常用记录(下):DNS系列之三
  6. java面试笔试谈
  7. SQL语句优化(分享)
  8. hibernate---性能优化, 1+N问题
  9. .Net中EF通用数据层小结
  10. 最新版Kali Linux虚拟机安装Open-vm-tools替代VMware tools
  11. CNN卷积核反传分析
  12. HDU 5828 Rikka with Sequence(线段树区间加开根求和)
  13. File类_常见的方法(获取目录中指定规则的内容)
  14. 转载:2.1 运行中的Nginx进程间的关系《深入理解Nginx》(陶辉)
  15. GIT中常用的命令
  16. 利用POST重启路由器,一直无法实现,求帮助
  17. Spring技术内幕:设计理念和整体架构概述(转)
  18. [原][osgearth]API加载earth文件的解析
  19. 【bzoj1067】[SCOI2007]降雨量 倍增RMQ
  20. 能力成熟度模型CMM

热门文章

  1. [C/C++] C++类对象创建问题
  2. BZOJ4737 组合数问题(卢卡斯定理+数位dp)
  3. 前端开发学习之——使用jquery/javascript判断及改变checkbox选中状态
  4. 玩(lay) 解题报告
  5. AOJ.592 神奇的叶子
  6. 【并查集】【P1525】关押罪犯
  7. poco入门
  8. ubuntu下如何控制风扇速度?
  9. All you need to know about sorting in Postgres
  10. 监听scrollview