题解 | #二叉树的下一个结点#

二叉树的下一个结点

https://www.nowcoder.com/practice/9023a0c988684a53960365b889ceaf5e

迭代法

使用栈来中序遍历,当节点值相同的时候,标志flag为true,再下一次拿到节点就是下一个节点并返回

注意由于传入的不一定是根节点,所以需要先拿到根节点

/*
struct TreeLinkNode {
    int val;
    struct TreeLinkNode *left;
    struct TreeLinkNode *right;
    struct TreeLinkNode *next;
    TreeLinkNode(int x) :val(x), left(NULL), right(NULL), next(NULL) {
        
    }
};
*/
#include <stack>
class Solution {
public:
    TreeLinkNode* GetNext(TreeLinkNode* pNode) {
        //中序遍历
        stack<TreeLinkNode*> st;
        
        TreeLinkNode*cur=pNode;
        while (cur->next!=nullptr) {
            cur=cur->next;
        }

        //这里{5,4,#,3,#,2},4,出错的原因是传入的不是根节点,导致栈没有保存5
        bool flag=false;
        while(!st.empty()||cur!=nullptr){
            while(cur!=nullptr)
            {   
                st.push(cur);
                cur=cur->left;
            }

            cur=st.top();
            st.pop();
            if(flag){
                return cur;
            }
            if(cur->val==pNode->val)
            {
                flag=true;
            }
        
            cur=cur->right;
        }
        return nullptr;
    }
};

全部评论

相关推荐

程序员小白条:主要没亮点,项目也是网上的,平平无奇,那只能海投了,奖项总得有一些,然后就是现在最好是前后端都会,自己能做项目并且运维的,要么找星球项目改改,要么找个开源项目改改,自己能拓展功能才是主要的,跟做效率很低很低
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-09 12:10
直接上图
牛客13578115...:改得一般,不值80
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务