跟进问题“在每个节点中填充下一个正确的指针”。层次遍历二叉树
来源:互联网 发布:森女系裙装淘宝店 编辑:程序博客网 时间:2024/06/04 18:53
本题源自leetcode
------------------------------------------------------------
例如:
1 / \ 2 3 / \ \ 4 5 7
结果:
1 -> NULL / \ 2 -> 3 -> NULL / \ \ 4-> 5 -> 7 -> NULL
思路1:
按层遍历 :每次弹出当前层的所有节点
struct TreeLinkNode { int val; TreeLinkNode *left, *right, *next; TreeLinkNode(int x) : val(x), left(NULL), right(NULL), next(NULL) {} }; void connect(TreeLinkNode *root) { if(root==NULL) return; queue<TreeLinkNode*> que; que.push(root); while(!que.empty()){ TreeLinkNode* currentNode=que.front(); que.pop(); int currentLen=que.size(); if(currentNode->left) que.push(currentNode->left); if(currentNode->right) que.push(currentNode->right); for(int i=0;i<currentLen;i++){ TreeLinkNode* nextNode=que.front(); que.pop(); currentNode->next=nextNode; currentNode=nextNode; if(currentNode->left) que.push(currentNode->left); if(currentNode->right) que.push(currentNode->right); } currentNode->next=NULL; } }
思路2:
每层都用一个levlHead节点来把,下一层连接起来,然后通过levelHead的next 向下遍历
void connect(TreeLinkNode *root) { if(root==NULL) return; while(root){ TreeLinkNode* levelHead=new TreeLinkNode(-1); //next指向下一层的第一个节点 TreeLinkNode* p=root; TreeLinkNode* pre=levelHead; while(p){ if(p->left){ pre->next=p->left; pre=pre->next; } if(p->right){ pre->next=p->right; pre=pre->next; } p=p->next; } pre->next=NULL; root=levelHead->next;//向下遍历 } }
思路三:
只要左子树存在,就让左子树的节点指向右孩子,右孩子的节点指向,他兄弟节点的左孩子
void connect(TreeLinkNode *root) { if(root==NULL) return; TreeLinkNode* p=root; TreeLinkNode* q; while(p->left){ q=p; while(q){ q->left->next=q->right; if(q->next) q->right->next=q->next->left; q=q->next; } p=p->left; } }
阅读全文
0 0
- 跟进问题“在每个节点中填充下一个正确的指针”。层次遍历二叉树
- 58 - 二叉树的中序遍历的下一个节点
- 找二叉树中指定节点在中序遍历中的下一个节点
- 《程序员面试金典》--寻找二叉树中某个节点中序遍历的下一个节点
- 二叉树的下一个节点(中序)
- java中序遍历二叉树下一个节点
- 树——二叉树中序遍历的下一个节点
- 二叉树中序遍历的下一个节点
- 二叉树中序遍历的下一个节点
- 树-二叉树中某个节点的下一个节点
- 二叉树系列---标记二叉树中每个节点的next指针
- leetcode之层次遍历,让每个节点的next指针指向右边
- 如何在遍历二叉树的同时,打印出每个节点的深度
- 二叉树的下一个节点
- 二叉树的下一个节点
- 二叉树的下一个节点
- 二叉树的下一个节点
- 二叉树的下一个节点
- ForkJoin框架解析
- ORACLE联机日志损坏修复
- Vue.js组件的重要选项
- SpringBoot学习-(十八)SpringBoot整合EhCache
- 在linux下搭建git服务器
- 跟进问题“在每个节点中填充下一个正确的指针”。层次遍历二叉树
- redis里key的生存时间
- Java学习笔记之IO(十四):Properties配置文件类
- 【面向JS--错误处理】
- hdu 5934 强连通 && 判断覆盖图的最少点
- Android 打开相机,相册
- PPT演示软件
- Java问题——过大或过小数值防止科学计数法
- Linux学习2-分区之分区设备文件名及挂载