题目:

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

思路:

考虑中序遍历的过程,

如果当前结点存在右子节点,那么当前结点的下一个结点应该为该右子树的最左边的结点;

如果当前结点没有右子节点,那么如果当前结点的父结点p->parent为其父结点的父结点p->parent->patent的左子结点,那么当前结点的下一结点即为其父结点;否则继续往上遍历,直至找到一个结点为其父结点的左子结点,那么该结点即为当前结点的下一结点,如果找不到,则返回NULL;

(文字描述比较晦涩,大家可以画图看看)

在线测试OJ:

http://www.nowcoder.com/books/coding-interviews/9023a0c988684a53960365b889ceaf5e?rp=3

AC代码:

using namespace std;
/*
struct TreeLinkNode {int val;struct TreeLinkNode *left;struct TreeLinkNode *right;struct TreeLinkNode *next;TreeLinkNode(int x) :val(x), left(NULL), right(NULL), next(NULL) {}
};
*/class Solution {
public:TreeLinkNode* GetNext(TreeLinkNode* pNode){if(pNode==NULL)return NULL;if(pNode->right!=NULL){TreeLinkNode* pTmp=pNode->right;while(pTmp->left!=NULL){pTmp=pTmp->left;}return pTmp;}else{while(pNode->next!=NULL){if(pNode==pNode->next->left)return pNode->next;pNode=pNode->next;}return NULL;}}
};

(剑指Offer)面试题58:二叉树的下一个结点相关推荐

  1. 剑指offer面试题[58]-二叉树的下一个结点

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

  2. 剑指offer(C++)-JZ8:二叉树的下一个结点(数据结构-树)

    作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 题目描述: 给定一个二叉树其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结 ...

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

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

  4. 剑指offer面试题[19]-二叉树的镜像

    题目描述 操作给定的二叉树,将其变换为源二叉树的镜像. 输入描述: 二叉树的镜像定义:源二叉树 8/ \6 10/ \ / \5 7 9 11镜像二叉树8/ \10 6/ \ / \11 9 7 5 ...

  5. 剑指offer面试题34. 二叉树中和为某一值的路径(先序遍历)(回溯)

    题目描述 输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径.从树的根节点开始往下一直到叶节点所经过的节点形成一条路径. 思路 详见链接 代码 class Solution:def ...

  6. 剑指offer面试题27. 二叉树的镜像(递归)

    题目描述 请完成一个函数,输入一个二叉树,该函数输出它的镜像. 思路 详见链接 代码 class Solution:def mirrorTree(self, root:TreeNode)->Tr ...

  7. 剑指Offer - 面试题58 - II. 左旋转字符串

    1. 题目 字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部.请定义一个函数实现字符串左旋转操作的功能.比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转 ...

  8. 剑指offer 面试题58 - II. 左旋转字符串

    字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部.请定义一个函数实现字符串左旋转操作的功能.比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结 ...

  9. 剑指offer面试题58 - II. 左旋转字符串(切片)(一行代码)

    题目描述 字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部.请定义一个函数实现字符串左旋转操作的功能.比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两 ...

  10. 剑指offer面试题58 - I. 翻转单词顺序(双指针)

    题目描述 输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变.为简单起见,标点符号和普通字母一样处理.例如输入字符串"I am a student. ",则输出&quo ...

最新文章

  1. msyql 字段说明
  2. 炫彩界面库使用方法问题记录
  3. (二)把域服务升级和迁移到Windows Server 2012 R2上
  4. 再见了, VS Code!
  5. 每年考研计算机专硕和学硕报比例,各院校研招计划发布 专硕与学硕比例调整...
  6. 学成在线--10.页面预览
  7. Linux 进程间通信(IPC)---大总结
  8. 警告 1 warning C4996: ‘scanf‘: This function or variable may be unsafe.
  9. activity 点击后传递数据给fragment_ViewModel+LiveData实现Fragment间通信
  10. 云服务器与传统服务器的优劣对比_相比于传统服务器,云服务器的优势在哪
  11. 第151天:网页中插入百度地图方法(不需要密钥)
  12. 【图像去噪】基于matlab GUI中值滤波图像去噪【含Matlab源码 205期】
  13. 函数式编程的兴衰(Composing Software 1)
  14. mapgis6.7原创2019视频教程
  15. postman“在Tests中通过data.token获取token失败”的解决方法
  16. 飞鱼星路由器如何限制外网访问服务器网站,飞鱼星路由器如何限制禁止指定电脑上网 | 192.168.1.1登陆页面...
  17. ArcGIS Server 切片数学关系阐释,小区域切图频繁出错解决方法
  18. 年终盘点跨平台技术(Hybrid、RN、Weex、Flutter)-全栈系列
  19. 高版本CAD如何降低版本?来看这种降低版本方法
  20. 大三期末前端页面开发论文

热门文章

  1. MSP430之自动增益程控放大main备份
  2. 神经网络入门--学习资源
  3. matlab中ezplot和plot, fplot这3
  4. 先验概率与后验概率的区别
  5. 会声会影2018,带你体验不一样的光影世界!
  6. FPGA开发设计流程
  7. ToList()所带来的性能影响
  8. 跨域总结(jquery,php)
  9. 轮子|Python2异常链
  10. flash 转 html5 工具_转