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

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

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

/*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;        }        //1.判断有没有右子树,pNode节点有右孩子,下一个结点就是以pNode结点的右孩子为根的子树中的最左下结点。        if(pNode->right!=NULL){            pNode=pNode->right;            //当左子树不为空时一直往下遍历            while(pNode->left!=NULL){                pNode=pNode->left;            }            return pNode;        }//2.pNode节点没有右孩子时,pNode节点是其父结点的左孩子,直接将父节点返回.        if(pNode->next==NULL){            return NULL;        }        if(pNode==pNode->next->left){            return pNode->next;//返回父节点        }//3.pNode节点没有右孩子时,pNode节点是其父结点的右孩子,需要不断的向上移动,直到父节点是其父节点的父节点的左孩子//既然他是父节点的左节点,此时将这个节点父节点返回即可,或者遍历到了根节点,返回null.        TreeLinkNode* pNext = pNode->next;        while(pNext->next!=NULL){            //父节点不为空时            if(pNext==pNext->next->left)            {//找到一个父节点的左子节点的节点,返回这个节点的父节点                return pNext->next;            }        //继续向上找父节点            pNext = pNext->next;        }        //走到这,父节点为空        return NULL;    }};

 

转载地址:http://bqypi.baihongyu.com/

你可能感兴趣的文章
C++模板
查看>>
【C#】如何实现一个迭代器
查看>>
【C#】利用Conditional属性完成编译忽略
查看>>
DirectX11 光照演示示例Demo
查看>>
VUe+webpack构建单页router应用(一)
查看>>
Node.js-模块和包
查看>>
(python版)《剑指Offer》JZ01:二维数组中的查找
查看>>
Spring MVC中使用Thymeleaf模板引擎
查看>>
PHP 7 的五大新特性
查看>>
深入了解php底层机制
查看>>
PHP中的stdClass 【转】
查看>>
XHProf-php轻量级的性能分析工具
查看>>
OpenCV gpu模块样例注释:video_reader.cpp
查看>>
OpenCV meanshift目标跟踪总结
查看>>
就在昨天,全球 42 亿 IPv4 地址宣告耗尽!
查看>>
听说玩这些游戏能提升编程能力?
查看>>
如果你还不了解 RTC,那我强烈建议你看看这个!
查看>>
沙雕程序员在无聊的时候,都搞出了哪些好玩的小玩意...
查看>>
Mysql复制表以及复制数据库
查看>>
Linux系统编程——线程池
查看>>