1 问题

给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针

2 分析

比如我现在的二叉树如下

42         61     3   5     7 

这里分3种情况

1) 如果这个节点包含右子树,那么下一个节点就是这个右子树的最左下节点,比如节点4的下一个节点是5.

2) 如果这个节点不包含右子树,如果这个节点的父节点的左子节点是同一个,那么下一个节点就是这个节点的父节点,比如节点6的下一个节点就是7.

3) 如果这个节点不包含右子树,如果这个节点的父节点的右子节点是同一个,这里分2种情况,我们先找到这节点的父结点,然后父节点的指针一直向上遍历,直到找到一个是它父结点的左子结点的结点。如果这样的结点存在,那么这个结点的父结点就是我们要找的下一个结点,比如节点3的下一个节点是4,也有可能没有下一个节点,比如节点7的下一个节点就是空。

3 代码实现

typedef struct Tree
{int value;struct Tree* left;struct Tree* right;struct Tree* parent;Tree(int value) : value(value), left(NULL), right(NULL), parent(NULL) {}Tree() : value(0), left(NULL), right(NULL), parent(NULL) {}
} Tree;Tree* getNext(Tree* node)
{if (NULL == node)return NULL;Tree* nextNode = NULL;if (NULL != node->right){Tree* rightNode = node->right;while (rightNode->left != NULL){rightNode = rightNode->left;}nextNode = rightNode;}else{Tree* currentNode = node;Tree* parentNode = currentNode->parent;while (NULL != parentNode && parentNode->right == currentNode){currentNode = parentNode;parentNode = currentNode->parent;}nextNode = parentNode;}return nextNode;
}

剑指offer之二叉树的下一个结点相关推荐

  1. 《剑指offer》-- 二叉树的下一个结点、对称二叉树、按之字性顺序打印二叉树、把二叉树打印成多行

    一.二叉树的下一个结点: 1.题目: 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. 2.解题思路: 分析二叉树 ...

  2. 剑指offer值二叉树的下一个结点

    题目简介 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. 解题思路 该题目主要考察对二叉树中序遍历规律的理解和分 ...

  3. 剑指offer(18) 二叉树的下一个结点

    题目描述 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. setsail 分析二叉树的下一个节点,一共有以下情况 ...

  4. 剑指offer:二叉树的下一个节点

    题目描述 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. /* struct TreeLinkNode {int ...

  5. 《剑指offer》二叉树的下一个节点

    题目:给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. 解析:主要分两大类.一类:该节点有右子树,则找到右子树的最 ...

  6. 剑指offer——8.二叉树的下一个节点

    题目: 题:给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. 知识点: 树的基本知识,节点的2个属性(value. ...

  7. 剑指offer——面试题58:二叉树的下一个结点

    剑指offer--面试题58:二叉树的下一个结点 这个题要认真分析一下... Solution1: 自己想出来的破算法 /* struct TreeLinkNode {int val;struct T ...

  8. 《LeetCode力扣练习》剑指 Offer 27. 二叉树的镜像 Java

    <LeetCode力扣练习>剑指 Offer 27. 二叉树的镜像 Java 一.资源 题目: 请完成一个函数,输入一个二叉树,该函数输出它的镜像. 例如输入: 4 / 2 7 / \ / ...

  9. 【LeetCode】剑指 Offer 27. 二叉树的镜像

    [LeetCode]剑指 Offer 27. 二叉树的镜像 文章目录 [LeetCode]剑指 Offer 27. 二叉树的镜像 一.递归法 二.辅助栈(或队列) 一.递归法 根据二叉树镜像的定义,考 ...

最新文章

  1. Beginning Adaptive Layout Tutorial
  2. 一步一步搞定InfoPath(02)--配置VSTA
  3. python与excel结合-Python和Excel终于可以
  4. 机器人导论知识点总结
  5. c语言中负数_C语言中负数的模数
  6. PAT甲题题解-1077. Kuchiguse (20)-找相同后缀
  7. 手把手教你进行R语言的安装及安装过程中相关问题解决方案
  8. 新塘linux启动过程,NUC972调试笔记之NAND分区调整新增
  9. 【转】winrar命令行详解
  10. 从假装在腾讯,到真的360 —— 一个应届准PM的独白(面经干货)
  11. digispark使用
  12. USB数据采集卡关于高电压数据采集提供的解决方案
  13. 一文读懂物联网的关键技术有什么?
  14. 人脸检测——基于face_recognition库
  15. 笔记本加装固态硬盘后系统迁移,开机出现桌面闪烁问题的解决方法
  16. Unity il2cpp new 内存分配过程
  17. 华为电脑如何投屏到电视linux,华为 P30 如何投屏到电脑
  18. GITC--2014全球互联网技术大会正式开始售票
  19. 前向差分、后向差分和中心差分误差分析
  20. 【深度分解】听趣拍云产品经理剖析视频基础知识(2)

热门文章

  1. 如何修改 asp.net core 5 程序的默认端口号?
  2. 如何通过 C# 判断某个 IP 是否属于某IP段?
  3. 三分钟总览微软任务并行库TPL
  4. 谈谈对IOC及DI的理解与思考
  5. CSRobot gen:mssql-c#类型映射
  6. 【Azure Show】|第九期 “我的计算机入门之路” 嘉宾秦婷婷汪宇杰文轩
  7. 跟我一起学.NetCore之中间件(Middleware)简介和解析请求管道构建
  8. .NET Core 下使用 RabbitMQ
  9. Git 常用操作 | 重写 commit 历史
  10. lin-cms-dotnetcore功能模块的设计