83:Populating Next Right Pointers in Each Node

来源:互联网 发布:java自学手册 编辑:程序博客网 时间:2024/06/03 12:41

题目:见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);        }};
0 0
原创粉丝点击