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

二叉树的下一个结点

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;
    }
};

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务