剑指offer 二叉树的下一个结点(C++)

题目描述

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

解题思路

  • 定义一个寻找根结点的函数,找到根结点,如果pNode本身为根结点,直接返回。
  • 定义一个中序遍历函数,并用vector容器存储二叉树中序遍历序列。
  • 找到容器中和pNode匹配的结点,返回结点的下一个结点即可。结点为空返回空,pNode在vector中的最后一个位置返回空。

代码实现

/*
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* FindpRoot(TreeLinkNode* pNode) // 寻找pNode所在二叉树的根结点
    {
   
        if(pNode == NULL) // 结点为空  返回NULL
            return NULL;
        if(pNode->next == NULL) // pNode为根结点直接返回该结点
            return pNode;
        TreeLinkNode* pRoot = pNode->next;
        for( ;pRoot->next; pRoot = pRoot->next);
        return pRoot;
    }
    
    void InOrderBiTree(TreeLinkNode* pRoot, vector<TreeLinkNode*> &vpNode) // 中序遍历二叉树
    {
   
        if(pRoot)
        {
   
            if(pRoot->left)
                InOrderBiTree(pRoot->left, vpNode);
            vpNode.push_back(pRoot);
            if(pRoot->right)
                InOrderBiTree(pRoot->right, vpNode);
        }
    }
    
    TreeLinkNode* FindNextNode(TreeLinkNode* pNode, vector<TreeLinkNode*> &vpNode)
    {
   
        if(pNode == NULL) // 结点为空返回空
            return NULL;
        if(vpNode.empty()) // 容器为空 返回空
            return NULL;
        vector<TreeLinkNode*>::iterator iter = vpNode.begin(
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值