Follow up for problem "Populating Next Right Pointers in Each Node".
What if the given tree could be any binary tree? Would your previous solution still work?
Note:
- You may only use constant extra space.
For example,
Given the following binary tree,
1 / \ 2 3 / \ \ 4 5 7
After calling your function, the tree should look like:
1 -> NULL / \ 2 -> 3 -> NULL / \ \ 4-> 5 -> 7 -> NULL 分析: 利用层次遍历的作用。 将每一层做设置next的操作,显然对于每一层第一个都不会是别的节点的next。 设置index来避免第一个点被记录为别的点的next。 代码: /** * Definition for binary tree with next pointer. * 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*> q1; q1.push(root); int t=1; TreeLinkNode * pre=NULL; bool index=false; while(!q1.empty()) { TreeLinkNode * root=q1.front(); --t; q1.pop(); if(root->left) q1.push(root->left); if(root->right)q1.push(root->right); if(index) { pre->next=root; } index=true; pre=root; if(t==0) { t=q1.size(); index=false; } } } };