zoukankan      html  css  js  c++  java
  • LeetCode117 每个节点的右向指针 II

    给定一个二叉树

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

    填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL

    初始状态下,所有 next 指针都被设置为 NULL

    说明:

    • 你只能使用额外常数空间。
    • 使用递归解题也符合要求,本题中递归程序占用的栈空间不算做额外的空间复杂度。

    示例:

    给定二叉树,

         1
       /  
      2    3
     /     
    4   5    7
    

    调用你的函数后,该二叉树变为:

         1 -> NULL
       /  
      2 -> 3 -> NULL
     /     
    4-> 5 -> 7 -> NULL


    /*
    算法思想:
        实际上是树的层序遍历的应用。
        这道题是每个节点的右向指针这道题的延伸。即不是完美二叉树了。但是还是可以一样的方法,所以这种非递归的解法很通用,因为是用的层次遍历加队列它才不管你是不是完美二叉树呢。需要用到queue来辅助,由于是层序遍历,每层的节点都按顺序加入queue中,而每当从queue中取出一个元素时,将其next指针指向queue中下一个节点即可。需要巧妙的通过给queue中添加空指针NULL来达到分层的目的,使每层的最后一个节点的next可以指向NULL。
    */
    //算法实现:
    /**
     * 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) return;
            queue<TreeLinkNode*> q;
            q.push(root);
            q.push(NULL);
            while (true) {
                TreeLinkNode *cur = q.front();
                q.pop();
                if (cur) {
                    cur->next = q.front();
                    if (cur->left) 
                        q.push(cur->left);
                    if (cur->right) 
                        q.push(cur->right);
                } 
                else {
                    if (q.size() == 0 || q.front() == NULL) 
                        return;
                    q.push(NULL);
                }
            }
        }
    };
  • 相关阅读:
    项目笔记:统计页面功能实现
    jquery easyui datagrid实现数据改动
    Skia图片解码模块流程分析
    TRIZ的成功案例
    基于HTML5的Web SCADA工控移动应用
    webservices系列(五)——javaweb整合Axis2及多service配置
    org.hibernate.PropertyValueException: not-null property references a null or transient value: model.
    线程池和异步线程
    [leetcode]Implement strStr()
    Python工作日类库Busines Holiday介绍
  • 原文地址:https://www.cnblogs.com/parzulpan/p/10060296.html
Copyright © 2011-2022 走看看