Populating Next Right Pointers in Each Node II
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
/** * 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*> qu; TreeLinkNode *te; int cntb = 0; int cnta = 0; qu.push(root); cntb = 1; while(!qu.empty()) { te = qu.front(); qu.pop(); cntb--; if(cntb == 0) { te->next = NULL; if(te->left) { qu.push(te->left); cnta++; } if(te->right) { qu.push(te->right); cnta++; } cntb = cnta; cnta = 0; continue; } else te->next = qu.front(); if(te->left) { qu.push(te->left); cnta++; } if(te->right) { qu.push(te->right); cnta++; } } } };
有了上一次的基础, 一次AC应该没问题
注意的是:
queue
pop()出队
push(obj);入队
empty();
front(); 是队首, 是最先入队的那个.
也就是说, queue是尾进头出
back();同理
还有一个size();
每天早上叫醒你的不是闹钟,而是心中的梦~
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步