leetcode第一刷_Populating Next Right Pointers in Each Node II
很自然的推广,假设去掉全然二叉树的条件呢?由于这个条件不是关键,因此不会影响整体的思路。做法依旧是每次找到一层的起点,然后一层一层的走。
假设是全然二叉树的话,每层的起点就是上一层起点的左孩子,兄弟之间的链接也简单,直接找相应父亲的左右孩子就可以。
一般二叉树时,起点应该是上一层第一个有孩子节点的左孩子,或者没有左孩子时。是他的右孩子。
为了能在孩子层中不断链接,我们必须保存当孩子层的前一个节点,当当前层找到一个节点有孩子,就接到这个pre节点后面,然后更新pre节点的指向。
class Solution { public: void connect(TreeLinkNode *root) { if(root == NULL) return; TreeLinkNode *beginNode = root, *leftNode, *pre; while(beginNode){ leftNode = beginNode; pre = NULL; beginNode = NULL; while(leftNode){ if(leftNode->left&&leftNode->right){ leftNode->left->next = leftNode->right; if(pre) pre->next = leftNode->left; if(!beginNode) beginNode = leftNode->left; pre = leftNode->right; }else if(leftNode->left){ if(pre) pre->next = leftNode->left; if(!beginNode) beginNode = leftNode->left; pre = leftNode->left; }else if(leftNode->right){ if(pre) pre->next = leftNode->right; if(!beginNode) beginNode = leftNode->right; pre = leftNode->right; } leftNode = leftNode->next; } } } };