116:Populating Next Right Pointers in Each Node【树】【DFS】

来源:互联网 发布:什么是ai设计软件 编辑:程序博客网 时间:2024/06/09 19:24

题目链接:click~

/*题意:f给定一个完全二叉树,将每一层的结点连接起来,要求使用O(1)的空间*//** *思路:1)按层遍历完全二叉树,记录每一层的第一个需要遍历的结点。观察发现,          下一层的第一个节点是本层第一个结点的左子结点。 *      2)把属于同一个父节点的左右子节点连接起来 *      3)连接不属于同一个父节点的临近结点,即跨子树的连接:我们可以通过父节点 *        的next指针,获取另一个父节点,那么该结点的左子结点就是临近结点。 * */class Solution {public:    void connect(TreeLinkNode *root) {        if(root == NULL) return;        TreeLinkNode *currLevel = root;        while(currLevel != NULL) {            TreeLinkNode *across = currLevel;            while(across != NULL) {                if(across->left != NULL)   //将左右子结点连接起来                    across->left->next = across->right;                if(across->right != NULL && across->next != NULL) //跨子树连接                    across->right->next = across->next->left;                across = across->next; //同一层向后走            }            currLevel = currLevel->left;//转到下一层        }    }};


0 0
原创粉丝点击