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:
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
无
/********************************* * 日期:2014-12-24 * 作者:SJF0115 * 题目: 117.Populating Next Right Pointers in Each Node II * 来源:https://oj.leetcode.com/problems/populating-next-right-pointers-in-each-node-ii/ * 结果:AC * 来源:LeetCode * 总结: **********************************/ #include <iostream> #include <queue> using namespace std; struct TreeLinkNode { int val; TreeLinkNode *left; TreeLinkNode *right; TreeLinkNode *next; TreeLinkNode(int x):val(x),left(NULL),right(NULL),next(NULL){} }; class Solution { public: void connect(TreeLinkNode *root) { if(root == NULL){ return; }//if queue<TreeLinkNode*> cur; queue<TreeLinkNode*> next; cur.push(root); TreeLinkNode *p,*pre; while(!cur.empty()){ pre = NULL; // 当前层遍历 while(!cur.empty()){ // 出队列 p = cur.front(); cur.pop(); // 横向连接 if(pre != NULL){ pre->next = p; }//if pre = p; // next保存下一层节点 // 左子树不空加入队列 if(p->left){ next.push(p->left); }//if // 右子树不空加入队列 if(p->right){ next.push(p->right); }//if }//while p->next = NULL; swap(next,cur); }//while } }; //按先序序列创建二叉树 int CreateBTree(TreeLinkNode*& T){ int data; //按先序次序输入二叉树中结点的值,-1表示空树 cin>>data; if(data == -1){ T = NULL; } else{ T = new TreeLinkNode(data); //构造左子树 CreateBTree(T->left); //构造右子树 CreateBTree(T->right); } return 0; } // 输出 void LevelOrder(TreeLinkNode *root){ if(root == NULL){ return; }//if TreeLinkNode *p = root,*q; while(p){ q = p; // 横向输出 while(q){ cout<<q->val<<"->"; q = q->next; }//while if(q == NULL){ cout<<"NULL"<<endl; }//if p = p->left; }//while } int main() { Solution solution; TreeLinkNode* root(0); CreateBTree(root); solution.connect(root); LevelOrder(root); }
[LeetCode]117.Populating Next Right Pointers in Each Node II
原文地址:http://blog.csdn.net/sunnyyoona/article/details/42127195