剑指Offer的学习笔记(C#篇)-- 二叉树的下一个节点(好理解版本)
题目描述
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
一 . 理解题意
该题目我们可以借鉴一个非常影响不好的例子来理解题意(重男轻女的思想,当然本人可不会这样,本人家庭更不会,从小被姐姐打成哈士奇)。
此外呢,该题目的关键点在于二叉树的遍历,其实这个已经说了好多次了,具体内容点这里。理解这个就好了,中序遍历嘛,就是左→根→右!
题目分析:我们把这个题目从一个“小家”出发,三个节点我们分别理解成(父节点--父母)、(左节点--儿子)、(右节点--闺女);而该节点的下一个节点我们可以理解成该节点向下一节点的索取位置。
所以呢,这个题目就可以从两个大方向,三个小方向出发了,分别是父母(父节点),孩子(儿子和女儿),所以啊,这个题目你在分析的时候一定要夹杂着重男轻女的思想。。
1. 站在苏大强和苏妈妈的角度,有明哲、明成、明玉三个孩子,两口子这么重男轻女,肯定不会向儿子索取东西,但是如果明玉有儿子,那么大强一定要先敲诈明玉的儿子一番(步骤2,女儿就算了,大强不忍心),如果没生儿子,那就会敲诈女儿明玉(步骤4,6,7),明玉,我要三室一厅。
2. 站在儿子的角度,比如啃老族明成,压根想都不用想,直接找老爹老妈要钱!!(步骤1,3)
3. 站在女儿明玉角度想,向父母索取压根没可能,就差把你卖了,所以呢,只能找那个可以管住你爹的爹的爹了(步骤5)。当然如果不存在了,就真的没法了,只能return null;(步骤8)了。
不知道这个例子合不合适,但是蛮好理解的,但是要记住,该题目是针对中序遍历!!!!!!!如果是前序或者后续就不可以这样想了,但是依然可以通过伦理性的思维去想,哈哈哈,不举例了,怕误人子弟。
二 . 代码实现
/*
public class TreeLinkNode
{
public int val;
public TreeLinkNode left;
public TreeLinkNode right;
public TreeLinkNode next;
public TreeLinkNode (int x)
{
val = x;
}
}*/
class Solution
{
public TreeLinkNode GetNext(TreeLinkNode pNode)
{
// write code here
//空值鲁棒判断
if(pNode == null)
{
return null;
}
//有女儿空,女儿有后代就要孙子,有孙女也不要,没孙子就要女儿
if(pNode.right != null)
{
pNode = pNode.right;
while(pNode.left != null)
{
pNode = pNode.left;
}
return pNode;
}
//没女儿的时候
while(pNode.next != null)
{
//儿子啃老
if(pNode.next.left == pNode)
{
return pNode.next;
}
//孙女找祖宗
pNode = pNode.next;
}
//下个节点是空的时候,输出空
return null;
}
}
剑指Offer的学习笔记(C#篇)-- 二叉树的下一个节点(好理解版本)的更多相关文章
- 剑指offer第二版面试题7:二叉树的下一个节点(JAVA版本)
题目:给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. 分析: 根据中序遍历的特点,要找到一个节点的下一个节点无非 ...
- (剑指Offer)面试题58:二叉树的下一个结点
题目: 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. 思路: 考虑中序遍历的过程, 如果当前结点存在右子节点, ...
- 剑指Offer的学习笔记(C#篇)-- 链表中倒数第K个点
题目描述 输入一个链表,输出该链表中倒数第k个结点. 一 . 数据结构基础概念普及(线性表). 线性表可分为顺序表与链表,它们是堆栈.队列.树.图等数据结构的实现基础. 顺序表,线性表的顺序存储结构是 ...
- 剑指Offer的学习笔记(C#篇)-- 序列化二叉树
题目描述 请实现两个函数,分别用来序列化和反序列化二叉树 一 . 理解题意 二叉树的序列化,是将一个结构化的东西变成扁平化的字符串,序列化二叉树或者是反序列化二叉树就是二叉树和扩展二叉树遍历序列之间的 ...
- 剑指Offer的学习笔记(C#篇)-- 反转链表
题目描述 输入一个链表,反转链表后,输出新链表的表头. 一 . 概念普及 关于线性表等相关概念请点击这里. 二 . 实现方法 目前,可以有两种方法实现该要求. 方法一:借助外部空间实现.这里可以将单链 ...
- 剑指Offer的学习笔记(C#篇)-- 旋转数组的最小数字
题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋 ...
- 剑指Offer的学习笔记(C#篇)-- 和为S的连续正数序列
题目描述 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100.但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数).没多久,他 ...
- 剑指Offer的学习笔记(C#篇)-- 数组中只出现一次的数字
题目描述 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. 题目给定:num1,num2分别为长度为1的数组.传出参数:将 num1[0], num2[0 ...
- 剑指Offer的学习笔记(C#篇)-- 平衡二叉树(二叉树后序遍历递归详解版)
题目描述 输入一棵二叉树,判断该二叉树是否是平衡二叉树. 一 . 题目分析 首先要理解一个概念:什么是平衡二叉树,如果某二叉树中任意的左右子树深度相差不超过1,那么他就是一颗平衡二叉树.如下图: 所以 ...
- 剑指Offer的学习笔记(C#篇)-- 二叉树的深度(详讲递归)
题目描述 输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度. 一 . 思维发散 借助这个题目,我想用一个更好理解的方法说一说递归. ...
随机推荐
- Raspberry Pi3 ~ 使用eclipse进行远程调试
为了开发方便需要在电脑上对树莓派进行远程Debug. l 在eclipse中安装交叉编译(参照开发环境搭建) arm-linux-gnueabihf-gcc l 树莓派中检查是否安装了gdb ...
- appium不支持Android7.0系统设备解决办法
1. 找到appium的安装目录下的adb.js文件. 2. 打开adb.js,手动修改该文件下的内容: Adb.prototype.getPIDsByName=function(name,cb){ ...
- python的上下文管理器
直接上代码: f = open('123.txt','w') try: f.write('hello world') except Exception: pass finally: f.close() ...
- 应用提交 App Store 上架被拒绝
审核的参考资料 https://developer.apple.com/icloud/documentation/data-storage/index.html https://developer.a ...
- BZOJ 1196 [HNOI2006]公路修建问题:二分 + 贪心生成树check(类似kruskal)
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1196 题意: n个城市,m对城市之间可以修公路. 公路有两种,一级公路和二级公路,在第i对 ...
- Log4Net的使用之winform
当我们将asp程序部署到远程服务器上的时候,如果遇到程序错误,如何能快速的判断我们程序的错误呢.所以-->Log4Net作为记录日志的一大神器,不得不学会熟练使用啊!没有那么多的原理,照猫画虎的 ...
- ZOJ1905Power Strings (KMP||后缀数组+RMQ求循环节)
Given two strings a and b we define a*b to be their concatenation. For example, if a = "abc&quo ...
- RMAN兼容性、控制文件自动备份、保存时间、备份策略、备份脚本(二)
RMAN 程序的兼容性 RMAN 环境由以下5部分组成:(1) RMAN executable(2) Recovery catalog database(3) Recovery catalog sch ...
- 洛谷P2024食物链——并查集补集的灵活运用
题目:https://www.luogu.org/problemnew/show/P2024 自己在做本题时最大的障碍就是:不会在一个集合的father改变时把相应的补集也跟着改变. 借鉴题解后,才明 ...
- nagios监控windows配置
1.下载并安装windows插件 http://sourceforge.net/projects/nscplus/NSCP-0.4.1.73-x64.msi2.windows端配置 nsclient. ...