这个题目之前做过了,但是由于思路不清晰,今天思路又卡了

比如:
           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;
};

对于每一个节点tnode,都要将其左右节点链接。如果没有右节点,则就要找和tnode同一层的节点,直到找到一个节点有左孩子或者右孩子,返回这个节点的孩子。

有一个问题要解决,在找和tnode同层的节点的孩子节点,必须保证tnode同层的所有节点已经链接了,用先左再右的递归不行,所以要用从右到左的递归。

TREE_NODE *find_next(TREE_NODE *root)
{while(root = root->pSib) {if(root->pLft || root->pRgt)return root->pLft?root->pLft:root->pRgt;}return NULL;
}
void LinkLevelNodes(TREE_NODE *root)
{if(!root) return ;if(root->pLft)root->pLft->pSib = root->pRgt?root->pRgt:find_next(root);if(root->pRgt)root->pRgt->pSib = find_next(root);LinkLevelNodes(root->pRgt);LinkLevelNodes(root->pLft);
}

链接二叉树中同一层的节点相关推荐

  1. 将二叉树中每一层的节点串成链表

    Crack interview 4.4 思想很简单,层序遍历: #include <iostream> #include <vector> #include <queue ...

  2. 二叉树中如何求根节点到任意节点的路径?

    二叉树中如何求任一节点的路径呢? 思路 使用先序遍历,处理的时候让节点入栈,并且加上标志位即可. 使用另外的result保存最终的路径. 函数 void pre_order(TreeNode * no ...

  3. 牛客题霸 [ 在二叉树中找到两个节点的最近公共祖先] C++题解/答案

    牛客题霸 [ 在二叉树中找到两个节点的最近公共祖先] C++题解/答案 题目描述 给定一棵二叉树以及这棵树上的两个节点 o1 和 o2,请找到 o1 和 o2 的最近公共祖先节点. 题解: 我们想想最 ...

  4. 在二叉树中找到两个节点的最近公共祖先(C++)

    在二叉树中找到两个节点的最近公共祖先 描述   给定一棵二叉树(保证非空)以及这棵树上的两个节点对应的val值 o1 和 o2,请找到 o1 和 o2 的最近公共祖先节点. 数据范围:树上节点数满足1 ...

  5. LeetCode 1602. 找到二叉树中最近的右侧节点(BFS)

    文章目录 1. 题目 2. 解题 1. 题目 给定一棵二叉树的根节点 root 和树中的一个节点 u ,返回与 u 所在层中距离最近的右侧节点,当 u 是所在层中最右侧的节点,返回 null . 示例 ...

  6. 二叉树中任意两个节点的距离

    题目: 一个普通二叉树,如何找到两个给定节点之间的距离? ,其中二叉树中每个结点的值都不相同 思路:两个节点之间的最短路径一定会经过两个节点的最小公共祖先,所以我们可以用LCA(最低公共祖先)的解法. ...

  7. leetcode刷题之 树(14)-递归:找出二叉树中第二小的节点

    [LeetCode] Second Minimum Node In a Binary Tree 二叉树中第二小的结点 Given a non-empty special binary tree con ...

  8. LeetCode 671. 二叉树中第二小的节点

    文章目录 1. 题目信息 2. 解题 2.1 递归查找 2.2 改循环 1. 题目信息 给定一个非空特殊的二叉树,每个节点都是正数,并且每个节点的子节点数量只能为 2 或 0.如果一个节点有两个子节点 ...

  9. LeetCode简单题之二叉树中第二小的节点

    题目 给定一个非空特殊的二叉树,每个节点都是正数,并且每个节点的子节点数量只能为 2 或 0.如果一个节点有两个子节点的话,那么该节点的值等于两个子节点中较小的一个. 更正式地说,即 root.val ...

最新文章

  1. 保障数据安全,强调科技向善,旷视发布《人工智能应用准则》
  2. 对tmemorystream的一些改进_delphi教程
  3. c语言链表把多少分以上打出来,大神帮我看一下怎么输入输出一个链表,我输入了但是没输出啊...
  4. 怎么测试本地网页在不同分辨率下电脑显示效果_干货:微信小程序测试过程中的各个要点...
  5. php钩子原理和实现
  6. android sdk引入 微信分享_微信分享sdk接入总结
  7. 为什么说Serverless是云的未来?
  8. 基于孪生卷积网络(Siamese CNN)和短时约束度量联合学习的tracklet association方法
  9. JavaScript启示录
  10. 显卡天梯图2022最新排名
  11. Win10系统禁用驱动程序强制签名
  12. 基于卡尔曼滤波器的回声消除算法
  13. PRINCE2认证10大常见问题集锦,拿走不谢
  14. java海康摄像头添加人脸_java调用海康人脸识别机5603的sdk的使用总结(二)
  15. ryu实例---Hub
  16. 调试华为MML协议备忘
  17. 北京大学计算机同等学力申硕信息平台,北京大学同等学力申硕有哪些专业?
  18. php 计算壬子,(14条消息)计算生辰八字五行属性的算法
  19. 趣味计算机知识问答题,趣味问答题及答案
  20. LeetCode 2312. 卖木头块

热门文章

  1. TensorBoard(一)
  2. 开源内容管理系统 php mysql_「分享」7 个精致的 PHP 开源内容管理系统(CMS)
  3. 最新综述:用于组合优化的强化学习
  4. 辰星计划2021 | 旷视春季实习生招募—空中宣讲会第二弹来了!
  5. 一文解析激光雷达中时序融合的研究现状和发展方向
  6. Word Embedding News | 词嵌入新鲜事:COVID-19特刊
  7. 第三届“中国法研杯”司法人工智能挑赛(CAIL2020)即将启动
  8. 抛开约束,增强模型:一行代码提升 ALBERT 表现
  9. 本周NLP、CV、机器学习论文精选推荐
  10. RealNVP与Glow:流模型的传承与升华