面试题58:二叉树的下一个结点
来源:互联网 发布:淘宝更换手机号 编辑:程序博客网 时间:2024/06/05 00:41
题目:给定一颗二叉树和其中的一个结点,如何找出中序遍历顺序的下一个结点?树中的结点除了有两个分别指向左右子节点的指针以外,还有一个指向父节点的指针。
中序遍历为:DBEFAC
1.结点有左右子树,因为是中序遍历,所以一个结点一定是在右子树中,所以不考虑左子树,直接遍历右子树的最左结点。如A,下一个结点是C
2.结点没有右子树,但是它是父节点的左结点,父节点就是下一个结点,如D
3.结点没有右子树,而且它是父节点的右结点,沿着它父节点向上遍历,直到找到一个是它父节点的左子结点的结点。如F,F的父节点是E,但E是父节点B的右子节点,所以继续往上找,找到B,B是A的左子结点,所以A就是下一个结点,如果没有找到返回NULL。
struct BTNode { int value; BTNode* left; BTNode* right; BTNode* parent;};BTNode * GetNext(BTNode * node){if(node==NULL)return NULL;BTNode * pNext=NULL;//如果结点的右子树不为空if(node->right!=NULL){BTNode * currentNode=node->right;//向下找到最左的结点while(currentNode->left!=NULL){currentNode=currentNode->left;}pNext=currentNode;}else if(node->parent!=NULL)//如果结点的父节点不为空{BTNode * currentNode=node;BTNode * parent=node->parent;//如果当前结点不是它父节点的子节点,就一直向上找,如果是,则它的父节点就是下一个结点while(currentNode!=parent->left&&parent!=NULL){currentNode=parent;parent=parent->parent;//向上查找父节点}pNext=parent;}return pNext;}
0 0
- 面试题58:二叉树的下一个结点
- 剑指offer-面试题58:二叉树的下一个结点
- 剑指offer--面试题58:二叉树的下一个结点
- 面试题58-二叉树的下一个结点
- 剑指offer-面试题58-二叉树的下一个结点
- 剑指offer 面试题58 二叉树的下一个结点
- 面试题58:二叉树的下一个结点
- 【剑指Offer】面试题58:二叉树的下一个结点
- 剑指offer面试题[58]-二叉树的下一个结点
- 面试题58:二叉树的下一个结点
- 剑指offer面试题[58]-二叉树的下一个结点
- 面试题65:二叉树的下一个结点
- 剑指offer--面试题8:二叉树的下一个结点
- 面试题58:二叉树中的下一个结点
- [剑指offer]面试题58:二叉树中的下一个结点
- 《剑指Offer》学习笔记--面试题58:二叉树的下一个结点
- 【剑指Offer学习】【面试题58:二叉树的下一个结点】
- 剑指offer——面试题58:二叉树的下一个结点
- servlet在tomcat中启动后访问不到的问题
- 未名 - markdown
- delphi 定义变量同时赋值
- 透视函数glFrustum(), gluPerspective()函数用法和glOrtho()函数用法.
- sphinx与coreseek
- 面试题58:二叉树的下一个结点
- pdf和图像文字识别提取工具
- CDN技术原理分析
- android 安装 avd的问题
- Android中自定义属性的使用
- Boost.Asio中的线程
- 二叉树遍历 非递归算法
- Class method differences in Python: bound, unbound and static
- 互联网时代是一个“打劫”的时代