剑指offer——面试题58:二叉树的下一个结点
来源:互联网 发布:vi保存退出ubuntu 编辑:程序博客网 时间:2024/06/05 08:22
题目:给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
代码:
/*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; TreeLinkNode* nextNode = NULL; if(pNode->right != NULL) // 如果该结点有右子树,那么下一个结点就是它右子树的最左子树 { TreeLinkNode* pRight = pNode->right; while(pRight->left != NULL) // 通过循环,寻找右子树的最左子树 pRight =pRight->left; nextNode = pRight; // 返回下一个结点 } else if(pNode->next != NULL) // 如果该结点没有右子树, { TreeLinkNode* parent = pNode->next; TreeLinkNode* current = pNode; while(parent != NULL && current == parent->right) // 如果该结点是它父结点的右子结点,不断沿着它父节点找, { // 直到找到一个是它父节点的左子结点 current = parent; parent = parent->next; } nextNode = parent; // 如果该结点是它父节点的左结点,它下一个结点就是它的父结点 } return nextNode; }};
分析:代码注释非常详尽了,不赘述。牛客网这题给的例程不好, next 其实表示的是父结点。
阅读全文
2 0
- 剑指offer-面试题58:二叉树的下一个结点
- 剑指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》——二叉树的下一个结点
- 剑指offer——57.二叉树的下一个结点
- 剑指offer—二叉树的下一个结点
- 剑指offer—二叉树的下一个结点
- 面试题58:二叉树的下一个结点
- ROS中常用的一些命令
- 强化学习笔记
- linux第一天(基础知识梳理)
- Java生成和操作Excel文件
- 实现一个基本图
- 剑指offer——面试题58:二叉树的下一个结点
- Oracle系统表整理 搜索方便
- GY_情感分析
- Fibonacci 动态规划
- bower安装好了angular 1.6.6,但是还是不能使用angular
- 随便输入一个数,从0到n的偶数之和
- 最终版】BurpSuite_Pro 1.7.27 Pro 破解版
- 简单的三角形
- Hanoi