leetcode 117. Populating Next Right Pointers in Each Node II BFS广度优先遍历

来源:互联网 发布:系统格式化数据恢复 编辑:程序博客网 时间:2024/06/04 01:36

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

he上一道题一样,代码一样使用,就是做一个简单的BFS广度优先遍历。

代码如下:

import java.util.ArrayList;import java.util.List;/*class TreeLinkNode {      int val;      TreeLinkNode left, right, next;      TreeLinkNode(int x) { val = x; }}*//* * 就是一个BFS广度优先遍历 * */public class Solution {    public void connect(TreeLinkNode root)     {        if(root == null)            return;        List<TreeLinkNode> myQueue = new ArrayList<TreeLinkNode>();        myQueue.add(root);        int count = 1;        while(myQueue.isEmpty()==false)        {            int tmp = 0;            for(int i=0;i<count-1;i++)            {                if(myQueue.get(0).left!=null)                {                    myQueue.add(myQueue.get(0).left);                    tmp++;                }                if(myQueue.get(0).right!=null)                {                    myQueue.add(myQueue.get(0).right);                    tmp++;                }                myQueue.get(0).next = myQueue.get(1);                myQueue.remove(0);            }                           if(myQueue.get(0).left!=null)            {                myQueue.add(myQueue.get(0).left);                tmp++;            }            if(myQueue.get(0).right!=null)            {                myQueue.add(myQueue.get(0).right);                tmp++;            }            myQueue.get(0).next = null;            myQueue.remove(0);            count = tmp;        }    }           }

下面是C++的做法,和上一道题一样,就是做一个BFS广度优先遍历

代码如下:

#include <iostream>#include <string>#include <vector>#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)     {        queue<TreeLinkNode*> que;        if (root == NULL)            return;        que.push(root);        while (que.empty() == false)        {            int size = que.size();            vector<TreeLinkNode*> one;            for (int i = 0; i < size; i++)            {                TreeLinkNode* top = que.front();                que.pop();                one.push_back(top);                if (top->left != NULL)                    que.push(top->left);                if (top->right != NULL)                    que.push(top->right);            }            for (int i = 0; i <= (int)one.size() - 2; i++)                one[i]->next = one[i + 1];            one[one.size() - 1]->next = NULL;        }    }};
阅读全文
0 0