剑指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#篇)-- 二叉树的深度(详讲递归)
题目描述 输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度. 一 . 思维发散 借助这个题目,我想用一个更好理解的方法说一说递归. ...
随机推荐
- java多线程---基础
一, java多线程----线程与进程 进程: 程序(任务)的执行过程,拥有资源(共享内存,共享资源)和线程(一个或者多个,至少一个). 例如:打开任务管理器,qq,chrome,都属于进程. 线程 ...
- 9.1 NOIP普及组试题精解(1)
9-1 series1.c #include <stdio.h> int main() { float s=0.0,k; int n; printf("输入数字k(1~15):& ...
- ubuntu gitlab服务器搭建
gitlab服务器搭建 1.安装依赖包 sudo apt-get install curl openssh-server ca-certificates postfix 执行完成后,出现邮件配置,选择 ...
- BZOJ 3398 [Usaco2009 Feb]Bullcow 牡牛和牝牛:dp【前缀和优化】
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3398 题意: 约翰要带N(1≤N≤100000)只牛去参加集会里的展示活动,这些牛可以是牡 ...
- ES6 generator 基础
参考文档 harmony:generators Generator是ES6的新特性,通过yield关键字,可以让函数的执行流挂起,那么便为改变执行流程提供了可能. 创建Generator functi ...
- css实现下拉列表
像上面的要想实现 Hover 标题时 内容区下拉的效果,一般是要用js实现: 先获取内容区的高度,由于内容区刚开始可能是隐藏的,那么怎么才能获取其高度呢?方法是先给其元素设置绝对定位并把位置保持和之 ...
- 查看linux连接进程占用的实时流量 -nethogs
1.安装nethogs yum -y install nethogs 2.安装完成后,就可以执行命令 nethogs 3.实时查看进程流量,来个图显示 图中会显示当前的nginx产生的流量有多少都会清 ...
- HihoCoder1650 : 扁平化管理([Offer收割]编程练习赛38)(二分)
描述 小Hi的公司包括CEO在内一共有N名员工.这N名员工的上下级关系形成树形结构,CEO处于树根,普通员工处于叶子节点. 现在公司希望管理扁平化,要求树形结构中的层级不超过L层.此外,假设A是B的直 ...
- Confd 配置指导
Quick Start Guide Before we begin be sure to download and install confd. Select a backend confd supp ...
- 【Lintcode】103.Linked List Cycle II
题目: Given a linked list, return the node where the cycle begins. If there is no cycle, return null. ...