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

二叉树的下一个结点

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

第二十二题 不是很懂  
第一种 暴力破解 遍历完next 回到根节点 再中序遍历 补充完所有的next 返回结果
/*
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:
    vector<TreeLinkNode*> node;
    TreeLinkNode* GetNext(TreeLinkNode* pNode) {
        // 怎么给的参数啊 这题目出的。。。看都看不懂
        // 那个8、9是什么啊
        
        // 好像是要求中序遍历 填充next next的值是指向下一个中序遍历的结点??
        // 标准答案  有 先遍历所有的next??好像是为了走到根节点????
        TreeLinkNode* temp=pNode;
        while(pNode->next!=NULL)
            pNode=pNode->next;

        // 正常中序遍历
        zhongxvbianli(pNode);
        for(int i=0;i<node.size();i++)
            node[i]->next=node[i+1];
        return temp->next;
    }
    void zhongxvbianli(TreeLinkNode* pNode)
    {
        if(pNode == NULL)
            return;
        zhongxvbianli(pNode->left);
//         cout<<pNode->val<<endl;
        node.push_back(pNode);
        zhongxvbianli(pNode->right);
    }
};
题解 文章被收录于专栏

一遍做剑指offer 一边保存做题步骤 并附带详细注释哦

全部评论

相关推荐

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