剑指offer-面试题58:二叉树的下一个结点
来源:互联网 发布:软件开发工艺流程 编辑:程序博客网 时间:2024/05/22 14:33
题目:给定一棵二叉树和其中的一个结点,如何找出中序遍历顺序的下一个结点?树中的结点除了有两个分别指向左右子结点的指针以外,还有一个指向父结点的指针。
思路:举一个例子,容易发现规律。这个问题可以分为两种情况:(1)结点存在右子结点,那么中序遍历的下一个结点就是它的右子结点的最左边的子结点。(2)结点不存在右子结点,这里又要考虑两种情况:一是结点本身作为左子结点,那么它的下一个结点就是它的父结点;二是结点本身作为它的父结点的右子结点,那么它的下一个结点为它的第一个作为左子结点的祖宗的父结点。
对于不存在右子结点的两种可以分开考虑,《剑指offer》里把这两种情况合并,代码要简洁的多。合并以后这样考虑:如果当前结点不是它的父结点的左子结点,那么把当前结点替换成它的父结点,直到当前结点为一个左子结点。下一个结点就是这个左子结点的父结点。
BinaryTreeNode* NextNode(BinaryTreeNode* pNode){ if(pNode == NULL) return NULL; BinaryTreeNode* NextNode = NULL; if(pNode->m_pRight != NULL) { NextNode = pNode->m_pRight; while(NextNode->m_pLeft != NULL) NextNode = NextNode->m_pLeft; } else if(pNode->m_pParent != NULL) { BinaryTreeNode* pCurrent = pNode; BinaryTreeNode* pParent = pNode->m_pParent; while(pParent != NULL && pCurrent == pParent->m_pRight) { pCurrent = pParent; pParent = pParent->m_pParent; } NextNode = pParent; } return NextNode;}
0 0
- 剑指offer-面试题58:二叉树的下一个结点
- 剑指offer--面试题58:二叉树的下一个结点
- 剑指offer-面试题58-二叉树的下一个结点
- 剑指offer 面试题58 二叉树的下一个结点
- 【剑指Offer】面试题58:二叉树的下一个结点
- 剑指offer面试题[58]-二叉树的下一个结点
- 剑指offer面试题[58]-二叉树的下一个结点
- 剑指offer--面试题8:二叉树的下一个结点
- [剑指offer]面试题58:二叉树中的下一个结点
- 《剑指Offer》学习笔记--面试题58:二叉树的下一个结点
- 【剑指Offer学习】【面试题58:二叉树的下一个结点】
- 剑指offer——面试题58:二叉树的下一个结点
- 剑指Offer面试题58:二叉树的下一个节点
- 面试题58:二叉树的下一个结点
- 面试题58-二叉树的下一个结点
- 面试题58:二叉树的下一个结点
- 面试题58:二叉树的下一个结点
- 剑指offer--二叉树的下一个结点
- POJ 2605 数学
- php显示动态时间源代码
- [备忘]Psycopg学习笔记(1)
- 内存缓存与LruCache
- 用Java写解谜Rpg-4.加载界面,RPG界面与Player
- 剑指offer-面试题58:二叉树的下一个结点
- BIOS、MBR、PBR等基础知识,兼谈U盘、移动硬盘以及操作系统的安装与启动基本原理
- android在ScrollView嵌套listview不能正常显示
- 【第四章】 资源 之 4.4 Resource通配符路径 ——跟我学spring3
- 解决SQL SERVER 2008数据库表中修改字段后不能保存的问题
- PHP加密代码
- 安卓开发之java基础笔记【3】
- 第七周项目2
- POJ 3264 RMQ—ST