比如:
           0
       1       2
   3      4         5
      6          7

1->2
3->4->5
6->7

参考数据结构:
struct TREE_NODE
{
        TREE_NODE(int n) : nVal(n), pLft(NULL), pRgt(NULL), pSib(NULL)
        {}

int nVal;
        TREE_NODE* pLft;
        TREE_NODE* pRgt;
        TREE_NODE* pSib;

};

在想这个题目的时候,有两个难点无法克服:

1. 左子树在递归过程中,需要用到右子树,所以要求右子树先递归遍历,最后在递归左子树

2. 如果一个节点没有子节点,如果将前一个节点的指针指向他后一个指针。

下面的算法可以将上面的两个问题解决

struct Node {Node *left;Node *right;Node *sib;
};Node *find_next(Node *root) {while (root = root->sib) {if (root->left | root->right)return root->left ? root->left : root->right;}return NULL;
}void linkLevelNodes(Node *root) {if (root == NULL)return;if (root->left)root->left->sib = root->right ? root->right : find_next(root);if (root->right)root->right->sib = find_next(root);linkLevelNodes(root->right);linkLevelNodes(root->left);
}

不用额外空间,链接二叉树同一层的每个node相关推荐

  1. python 旋转矩阵_【每日算法Day 93】不用额外空间,你会旋转一个矩阵吗?

    第 100 天时,我可能会对这 100 天以来的算法题进行一个总结,然后暂时停止更新 LeetCode 题解了. 下一步可能更新 NLP 相关算法了,非常感谢大家每天的支持. 题目链接 LeetCod ...

  2. Java有序数组——原地去重——不使用额外空间

    Java数组去重 Java有序数组--原地去重--不使用额外空间 1. 题目: 2. 示例: 3. 思路: 4. 源码 5. 运行结果: 6. 拓展 Java有序数组--原地去重--不使用额外空间 1 ...

  3. Web网页分享到新浪微博与QQ空间链接

    分享新浪微博 前端参数设置 var url = "${templateArticle.articleUrl?replace("\\","/")}&qu ...

  4. 不用辅助空间的归并排序

    题目要求:合并两个已有序序列为A[0-i],A[i+1-N-1] 为A[0...N-1], 要求不用或者只使用常量辅助空间 为叙述方便,表示A[0-i]为a[0..n-1],A[i+1-N-1]为b[ ...

  5. 链接二叉树中同一层的节点

    这个题目之前做过了,但是由于思路不清晰,今天思路又卡了 比如:            0        1       2    3      4         5       6          ...

  6. c盘users的用户名怎么改_iphone备份太大,严重挤占C盘空间怎么办?不用额外软件将备份放在C盘之外的教程...

    ❤❤❤❤❤❤❤❤点蓝字关注⬆️ 这篇为公众号历史文章重发,因为最近后台问这个问题的非常多,周末再发一遍,部分地方做了修改,容易出错的细节更加突出强调,希望能帮到大家. 通过iTunes备份iphone ...

  7. 不用额外变量交换两个整数的值

    题目 如何不用任何额外变量交换两个整数的值 基本思路 如果给定整数a和b使用如下三行代码即可交换a和b的值: a = a ^ b b = a ^ b a = a ^ b 如何理解这三行代码的具体功能呢 ...

  8. qq空间h5页面,如何在微信中直接打开qq空间链接却不需要登陆qq账号密码

    我们在玩微信营销的时候,发现一个有趣的问题:在微信上打开qq页面,不需要登陆qq账号密码,这是怎么回事呢? 这个qq空间h5页面是怎么做的呢? 微信打开免登陆QQ: 如果随便一篇QQ空间文章或者说说, ...

  9. 输出二叉树每一层的最右节点

    题目含义如图: 解题思路: 二叉树层次遍历,输出每一层的最后一个元素即可: 参考层次遍历代码 struct TreeNode {int val;TreeNode* left;TreeNode* rig ...

最新文章

  1. 如何使用Python创建,读取,更新和搜索Excel文件
  2. 高性能Linux服务器运维实战,《高性能Linux服务器构建实战》笔记
  3. GameObject 与gameObject的区别
  4. 如何折叠Visual Studio Code for Windows中的代码部分?
  5. Oculus关于Internal Error:OVR53225466报错解决方法
  6. Python:遍历指定目录下所有的c语言源代码文件
  7. 【离散数学】单向连通和弱连通的区别
  8. php 修改最大上传,php 修改上传文件大小限制实例详解
  9. 《罗辑思维》让知识交融做爱
  10. Jenkins把GitHub项目做成Docker镜像
  11. Linux操作系统安装ELK stack日志管理系统--(1)Logstash和Filebeat的安装与使用
  12. Hadoop下载、安装与遇到问题
  13. 算法图解:像小说一样有趣的算法入门书
  14. 小程序审核规则大致内容
  15. 专利与论文-1:为什么要写专利?专利有什么好处?
  16. HTML制作虾米音乐,最新虾米音乐电台调用代码
  17. Java枚举—枚举初识
  18. Android 新增API Autofill
  19. 转:什么是超融合?超融合有什么作用,超融合的概念.
  20. Grain Identity

热门文章

  1. 深度学习和目标检测系列教程 15-300:在 Python 中使用 OpenCV 执行 YOLOv3 对象检测
  2. php贝叶斯,php – 将单个概率与朴素贝叶斯垃圾邮件过滤相结合
  3. SIGIR 2021 | Pchatbot: 大规模个性化聊天机器人数据集
  4. 为新研究准备好一块用武之地:最全任务型对话数据调研
  5. 经典论文复现 | PyraNet:基于特征金字塔网络的人体姿态估计
  6. web公选课第三节2020.5.18
  7. 在Android设备部署PyTorch模型
  8. 【教程】Jupyter notebook基本使用教程
  9. php-fpm自启动,php-fpm自启脚本
  10. Visual C++——CComboBox控件在对话框中没有下拉项目问题解决方案