如何找到提供网站建设服务的同时,还能自学编程的网站?
摘要:服务好的网站建设联系人,自学编程网站,上海网页设计培训机构,桂平网站设计【C二叉树】进阶OJ题 目录 【C二叉树】进阶OJ题1.二叉树的层序遍历II示例代码解题思路 2.二叉搜索树与双向链表示例代码解题思路 3.从前序与中序遍历序列构造二叉
服务好的网站建设联系人,自学编程网站,上海网页设计培训机构,桂平网站设计【C二叉树】进阶OJ题 目录 【C二叉树】进阶OJ题1.二叉树的层序遍历II示例代码解题思路 2.二叉搜索树与双向链表示例代码解题思路 3.从前序与中序遍历序列构造二叉树示例代码解题思路 4.从中序与后序遍历序列构造二叉树示例代码解题思路 5.二叉树的前序遍历#xff08;非递归迭…【C二叉树】进阶OJ题 目录 【C二叉树】进阶OJ题1.二叉树的层序遍历II示例代码解题思路 2.二叉搜索树与双向链表示例代码解题思路 3.从前序与中序遍历序列构造二叉树示例代码解题思路 4.从中序与后序遍历序列构造二叉树示例代码解题思路 5.二叉树的前序遍历非递归迭代实现示例代码解题思路 6.二叉树的中序遍历非递归迭代实现示例代码解题思路 7二叉树的后序遍历非递归迭代实现示例代码解题思路 作者爱写代码的刚子 时间2023.9.6 前言本篇博客总结了一些二叉树有关的一些中等难度OJ题总结这些题的解题思路 1.二叉树的层序遍历II
题目链接
示例代码
class Solution {
public:vectorvectorint levelOrderBottom(TreeNode* root) {vectorvectorint vv;if(!root){return vv;}queueTreeNode* q;q.push(root);while(!q.empty()){int curlevel q.size();vv.push_back(vectorint ());while(curlevel--){TreeNode *frontq.front();vv.back().push_back(front-val);q.pop();if(front-left){q.push(front-left);}if(front-right){q.push(front-right);}}}reverse(vv.begin(),vv.end());return vv;}
};解题思路 选择使用队列来实现 注意这里使用变量curlevel来记录每层的元素个数并且第二个while循环中需要curlevel来计数因为题目中要求返回 vectorvector所以记录每层的元素个数是必要的。 由于题目要求返回自底向上的层序遍历所以我们还需要reverse函数将vectorvector容器进行反转。
2.二叉搜索树与双向链表
题目链接
示例代码
class Solution {
public:void test(TreeNode* cur,TreeNode* prev){if(curnullptr){return;}test(cur-left,prev);cur-leftprev;if(prev)//注意prev可能为nullptr{prev-rightcur;}prevcur;test(cur-right,prev);}TreeNode* Convert(TreeNode* pRootOfTree) {TreeNode*prevnullptr;test(pRootOfTree,prev);TreeNode* leftoverpRootOfTree;while(leftoverleftover-left){leftoverleftover-left;}return leftover;}
};
解题思路
采用中序遍历由于二叉树遍历的特殊性我们无法找到下一个遍历的对象所以我们设立新旧指针cur和prev由于根节点prev未知所以我们传入nullptr我们让cur指针先走对旧节点的指针朝向进行修改prev的left和right指针如图
本质其实就是让cur先走记录先前节点prev并修改先前节点的指针朝向。
