leetcode Populating Next Right Pointers in Each Node 树 队列应用

来源:互联网 发布:淘宝店名叫什么好 编辑:程序博客网 时间:2024/06/03 06:25

Given a binary tree

    struct TreeLinkNode {      TreeLinkNode *left;      TreeLinkNode *right;      TreeLinkNode *next;    }

Populate each next pointer to point to its next right node. If there is no next right node, the next pointer should be set to NULL.

Initially, all next pointers are set to NULL.

Note:

  • You may only use constant extra space.
  • You may assume that it is a perfect binary tree (ie, all leaves are at the same level, and every parent has two children).

For example,
Given the following perfect binary tree,

         1       /  \      2    3     / \  / \    4  5  6  7

After calling your function, the tree should look like:

         1 -> NULL       /  \      2 -> 3 -> NULL     / \  / \    4->5->6->7 -> NULL
题目改了下一般树的数据结构,加了个next指针,意思是把每行用next串接起来,并且是个满二叉树。看到每一行就想到层序遍历,既然是满二叉树,那每层开始肯定是有规律的,所以只需要一个队列就行了,还需要用pre指针记录上个节点,用一个count计数器,判断是否是每层的头,如果不是头则把现在这个节点接到pre后面。

class Solution {public:void connect(TreeLinkNode *root) {if (root == NULL) return;queue<TreeLinkNode *>Q;Q.push(root);int count = 0,up=0;//up表示次方,因为每层的头部就是2的up次方TreeLinkNode *pre=NULL, *node=NULL;while(!Q.empty()){count++;pre = node;node = Q.front();Q.pop();if (node->left) Q.push(node->left);//左孩子入队列if (node->right) Q.push(node->right);//右孩子入队列if (count != pow(2, up))//判断是否是每一层的开头,如果不是则连接到pre后面pre->next = node;elseup++;}}};


0 0
原创粉丝点击