博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
二叉树的下一个节点
阅读量:5110 次
发布时间:2019-06-13

本文共 1967 字,大约阅读时间需要 6 分钟。

题目描述

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

 

解题思路:

情况一、所给的节点的右子树不是空,则顺着找最小的

情况二、所给的节点右子树是空,且是左儿子则返回父节点

情况三、所给的节点右子树是空,且是右儿子且父亲是祖父的左儿子,则返回祖父节点

 

class Solution {public:    TreeLinkNode* getRoot(TreeLinkNode* pNode){        TreeLinkNode* root = NULL;        while(pNode != NULL){            root = pNode;            pNode = pNode->next;        }        return root;    }    TreeLinkNode* _getNext(TreeLinkNode* root, TreeLinkNode *pNode){        if(root == NULL) return NULL;//        cout<<"rval="<
val<
right != NULL){ //当前节点的右子树不是空则顺着找最左的节点 res = root->right; while(res != NULL){ if(res->left != NULL){ res = res->left; }else{ break; } } }else{ if(root->next != NULL){ if(root->next->left == root){ //如果当前节点的右子树为空且当前节点是左子树 return root->next; }else if(root->next->right == root && root->next == root->next->next->left){ //如果当前节点的右子树为空,当前节点是右子树且父节点是祖父的左子树 return root->next->next; } } }// cout<<"xxx"<
left != NULL){ lRes = _getNext(root->left, pNode); } TreeLinkNode * rRes = NULL; if(root->right != NULL){ rRes = _getNext(root->right, pNode); } if(lRes != NULL){ return lRes; }else if(rRes != NULL){ return rRes; }else{ return NULL; } } } TreeLinkNode* GetNext(TreeLinkNode* pNode) { TreeLinkNode *root = getRoot(pNode); return _getNext(root, pNode); }};

  

转载于:https://www.cnblogs.com/chengsheng/p/10698316.html

你可能感兴趣的文章
Flutter 34: 图解自定义 View 之 Canvas (一)
查看>>
Swift - 使用下划线(_)来分隔数值中的数字
查看>>
代码面试最常用的10大算法(三)
查看>>
《Cracking the Coding Interview》——第14章:Java——题目2
查看>>
Careercup - Facebook面试题 - 5729456584916992
查看>>
Java注解基本原理
查看>>
如何使用Visual Studio 2008(VS2008)编译C语言
查看>>
fullPage.js
查看>>
个人作业3-(Alpha阶段)
查看>>
phpmyadmin-您可能正在上传很大的文件,请参考文档来寻找解决方法
查看>>
System.Web.HttpException: 响应在此上下文中不可用
查看>>
zookeeper 常用命令
查看>>
企业级Apache详解2
查看>>
Python学习--Selenium模块简单介绍(1)
查看>>
AsyncTask实现网络图片的异步加载
查看>>
js中面向对象的封装
查看>>
s3c6410_时钟初始化
查看>>
STL中的常用的vector,map,set,Sort用法
查看>>
常用python机器学习库总结
查看>>
C/C++:.hpp与.h区别
查看>>