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

比如:
           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. iPhone全球技术巡讲北京站,WWDRChina 2009 Beijing
  2. Linux Kernel TCP/IP Stack — L7 Layer — 高性能网络 I/O 服务器模型
  3. Matplotlib实例教程(五)绘制散点图
  4. 简便满分解法:1005 继续(3n+1)猜想 (25分)
  5. Spring Boot CommandLineRunner和ApplicationRunner
  6. 中国微型计算机分省市产量数据统计,2017年6月中国微型计算机设备产量统计数据分析...
  7. observable_Java Observable clearChanged()方法与示例
  8. CSDN开放90%页面缩放阅读博文的惊喜
  9. VSCode 如何新建vue模板 - 插件引入篇
  10. SQL中到底要不要用WHERE 1=1
  11. 一些基本的数学概念,LDA的表述
  12. Python Re 模块超全解读
  13. Elasticsearch 快照到 HDFS 遇到的 PrivateCredentialPermission 问题及解决方法
  14. 如何处理计算机显示器故障,电脑显示器常见的故障及解决办法
  15. 赛博朋克!灵感来自枫树种子荚的多翼滑翔机,空中可分体
  16. 面试记录-苏宁(客服研发中心)
  17. 洛谷1967 火车运输 kruskal求最大生成树 倍增LCA维护最小值
  18. 解决input框上下偏移问题
  19. 无线通信技术热点及发展趋势
  20. Android 单元测试之Mockito

热门文章

  1. java中英对比_2017-11-09 中英文代码对比系列之Java一例
  2. 科研助力 | 牛津,MIT导师计算机科研项目招生(仅限AI,机器学习,深度学习方向)...
  3. 解决Transformer固有缺陷:复旦大学等提出线性复杂度SOFT
  4. CMU提出「十字绣网络」,自动决定多任务学习的最佳共享层
  5. SQuAD文本理解挑战赛十大模型解读
  6. java第一章Java语言概述和入门程序
  7. Spring Security基于角色的权限管理
  8. HDU1007 Quoit Design 分治+递归
  9. 堆晶结构_内蒙古苏尼特左旗地区堆晶角闪辉长岩的发现及地质意义
  10. r语言上机文本分析与词云绘制_倚天屠龙记的文本分析