zoukankan      html  css  js  c++  java
  • 二叉树的下一个结点

    时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M

    题目描述

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

    思路:

    中序遍历:左中右,分析二叉树的下一个结点,一种有以下几种情况:

    1. 二叉树为空,则返回空
    2. 若存在节点右孩子,则设置一指针从该节点的右孩子出发,一直到沿着左子节点找到叶子节点即为下一个节点
    3. 若该节点不是根节点。如果该节点是其父节点的左孩子,则返回父节点;否则继续向上遍历其父节点,重复之前的判断,返回结果。
    /*
    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;
            if(pNode->right != NULL)
            {
                pNode = pNode->right;
                while(pNode->left)
                    pNode = pNode->left;
                return pNode;
            }
            while(pNode->next)
            {
                TreeLinkNode *pRoot = pNode->next;
                if(pRoot->left == pNode)
                    return pRoot;
                pNode = pNode->next;
            }
            return NULL;
        }
    };
    
  • 相关阅读:
    各自的特点:
    errno
    内存(堆)的动态申请和释放
    printf和scanf中的%控制
    linux中软件包管理
    Ubuntu新装系统要装软件
    数组
    linux c中需要记住的东西
    硬件设计中的一些思路
    传输线理论
  • 原文地址:https://www.cnblogs.com/whiteBear/p/12686448.html
Copyright © 2011-2022 走看看