83:Populating Next Right Pointers in Each Node

    xiaoxiao2021-03-25  120

    题目:见https://leetcode.com/problems/populating-next-right-pointers-in-each-node/?tab=Description

    解析1:由于该题目要求使用常数空间,因此只能使用迭代法,代码如下,注意代码也能适用该问题的第二个版本https://leetcode.com/problems/populating-next-right-pointers-in-each-node-ii/?tab=Description

    // 迭代法,时间复杂度 O(n),空间复杂度 O(logn) class Solution { public: void connect(TreeLinkNode* root) { TreeLinkNode* cur = root; while (cur) { TreeLinkNode dummy{-1}; TreeLinkNode* prev = &dummy; while (cur) { if (cur -> left) { prev -> next = cur -> left; prev = prev -> next; } if (cur -> right) { prev -> next = cur -> right; prev = prev -> next; } cur = cur -> next; } cur = dummy.next; } } };

    解析2:该问题也可以使用递归法求解,但空间需求为 O(logn),不满足题意,代码如下:

    // 递归法,时间复杂度 O(n),空间复杂度 O(logn) class Solution { public: void connect(TreeLinkNode* root) { connect(root, nullptr); } private: void connect(TreeLinkNode* root, TreeLinkNode* sibling) { if (!root) return; else root -> next = sibling; connect(root -> left, root -> right); if (sibling) connect(root -> right, sibling -> left); else connect(root -> right, nullptr); } };
    转载请注明原文地址: https://ju.6miu.com/read-25627.html

    最新回复(0)