Populating Next Right Pointers in Each Node II

来源:互联网 发布:求数组最大值和最小值 编辑:程序博客网 时间:2024/05/01 06:24

题目大意:二叉树里面每个节点都有一个next指针,要求使得每个节点的next指针指向这一层的最先遇到的节点。

解题思路:宽度遍历。

#include <iostream>#include <cstdio>#include <queue>using namespace std;struct TreeLinkNode {    int val;    TreeLinkNode *left, *right, *next;    TreeLinkNode(int x) : val(x), left(NULL), right(NULL), next(NULL) {}};class Solution {public:    void connect(TreeLinkNode *root) {        if(root == NULL)          return;        queue<TreeLinkNode *> node_queue;        node_queue.push(root);        while(!node_queue.empty()) {            TreeLinkNode *node = node_queue.front();            node_queue.pop();            if(node->left != NULL) {                connectAssist(node->left, node);                node_queue.push(node->left);            }            if(node->right != NULL) {                connectAssist(node->right, node);                node_queue.push(node->right);            }        }    }private:    void connectAssist(TreeLinkNode *cur_node, TreeLinkNode *parent) {        if(cur_node != NULL) {            if(parent == NULL) {                cur_node->next = NULL;            } else {                if(cur_node == parent->left) {                    if(parent->right != NULL) {                        cur_node->next = parent->right;                    } else {                        cur_node->next = getParentNextChild(parent->next);                    }                } else {                    cur_node->next = getParentNextChild(parent->next);                }            }            connectAssist(cur_node->left, cur_node);            connectAssist(cur_node->right, cur_node);        }    }        TreeLinkNode *getParentNextChild(TreeLinkNode *parent_node) {        if(parent_node == NULL)          return NULL;        TreeLinkNode *node = NULL;        while(parent_node) {            if(parent_node->left != NULL) {                node = parent_node->left;                break;            }            if(parent_node->right != NULL) {                node = parent_node->right;                break;            }            parent_node = parent_node->next;        }        return node;    }};


0 0
原创粉丝点击