当前位置: 首页 > news >正文

建设项目自主验收验收网站象山网站建设

建设项目自主验收验收网站,象山网站建设,网站模板中文,济南网站建设在哪里【LetMeFly】94.二叉树的中序遍历#xff1a;递归/迭代(栈模拟递归) 力扣题目链接#xff1a;https://leetcode.cn/problems/binary-tree-inorder-traversal/ 给定一个二叉树的根节点 root #xff0c;返回 它的 中序 遍历 。 示例 1#xff1a; 输入#xff1a;root […【LetMeFly】94.二叉树的中序遍历递归/迭代(栈模拟递归) 力扣题目链接https://leetcode.cn/problems/binary-tree-inorder-traversal/ 给定一个二叉树的根节点 root 返回 它的 中序 遍历 。 示例 1 输入root [1,null,2,3] 输出[1,3,2]示例 2 输入root [] 输出[]示例 3 输入root [1] 输出[1]提示 树中节点数目在范围 [0, 100] 内-100 Node.val 100 进阶: 递归算法很简单你可以通过迭代算法完成吗 方法一深度优先搜索DFS(递归) 写一个函数进行深搜 函数接受一个节点作为参数若节点为空则直接返回否则递归左子节点当前节点加入答案递归右子节点。 从根节点开始使用上述函数递归递归完成后返回答案。 时间复杂度 O ( s i z e ( t r e e ) ) O(size(tree)) O(size(tree))空间复杂度 O ( s i z e ( t r e e ) ) O(size(tree)) O(size(tree)) AC代码 C class Solution { private:vectorint ans;void dfs(TreeNode* root) {if (!root) {return ;}dfs(root-left);ans.push_back(root-val);dfs(root-right);} public:vectorint inorderTraversal(TreeNode* root) {dfs(root);return ans;} };Python # from typing import Optional, List# # Definition for a binary tree node. # class TreeNode: # def __init__(self, val0, leftNone, rightNone): # self.val val # self.left left # self.right rightclass Solution:def dfs(self, root: Optional[TreeNode]) - None:if not root:returnself.dfs(root.left)self.ans.append(root.val)self.dfs(root.right)def inorderTraversal(self, root: Optional[TreeNode]) - List[int]:self.ans []self.dfs(root)return self.ans方法二使用栈模拟递归栈模拟递归 递归过程中实际上是系统使用栈帮你存下了当前的信息调用函数结束后恢复当前信息继续往下执行。因此我们使用栈模拟一下递归即可。 递归的时候都需要保存哪些信息呢其实我们只需要保存当前节点是什么和当前节点是否递归过(左)子节点即可。 若是第一次处理到这个节点则先将右子入栈再将本节点再次入栈并标记一下说左子节点入过栈了最后将左子节点入栈。这样出栈顺序将时左中右 出栈时先看节点是否为空为空直接返回。若左子节点入栈过了则将当前节点值加入答案否则左子还未入栈执行“第一次处理到这个节点”的操作。 时间复杂度 O ( s i z e ( t r e e ) ) O(size(tree)) O(size(tree))空间复杂度 O ( s i z e ( t r e e ) ) O(size(tree)) O(size(tree)) 使用栈模拟递归时空复杂度都不变但毕竟保存的信息变少了将会更高效。 AC代码 C class Solution { public:vectorint inorderTraversal(TreeNode* root) {vectorint ans;stackpairTreeNode*, bool st; // [node, ifPushedChild, ...st.push({root, false});while (st.size()) {auto [thisNode, ifPushedChild] st.top();st.pop();if (!thisNode) {continue;}if (ifPushedChild) {ans.push_back(thisNode-val);}else {st.push({thisNode-right, false});st.push({thisNode, true});st.push({thisNode-left, false});}}return ans;} };Python # from typing import Optional, List# # Definition for a binary tree node. # class TreeNode: # def __init__(self, val0, leftNone, rightNone): # self.val val # self.left left # self.right rightclass Solution:def inorderTraversal(self, root: Optional[TreeNode]) - List[int]:ans []st [(root, False)]while st:thisNode, ifPushedChild st.pop()if not thisNode:continueif ifPushedChild:ans.append(thisNode.val)else:st.append((thisNode.right, False))st.append((thisNode, True))st.append((thisNode.left, False))return ans 同步发文于CSDN原创不易转载经作者同意后请附上原文链接哦~ Tisfyhttps://letmefly.blog.csdn.net/article/details/136090242
http://www.zqtcl.cn/news/158233/

相关文章:

  • 企业网站 备案 网站名称凡科做视频网站
  • 湘潭建设公司网站杭州网站优化
  • 工信部备案网站网站空间服务商
  • 深圳市企业网站seo营销工具桂林百姓网
  • 网站建设所需材料wordpress nginx配置文件
  • 给企业做网站运营广州制作网站公司
  • 一个网站可以有几个关键词网页游戏制作过程
  • 网站可视化后台桥西区网站建设
  • 个人怎么建设网站北京朝阳区最好的小区
  • 企业应该如何建设网站江苏润祥建设集团网站
  • 沈阳网站建设价格wordpress h1标签
  • 找别人做网站一般注意什么三亚专业做网站
  • 企业营销网站的建设罗湖做网站
  • 百度蜘蛛抓取新网站WordPress20w文章
  • 国际贸易网站有哪些可植入代码网站开发
  • 信息服务平台有哪些网站东莞网站关键词
  • 青岛网站定制手机软件开发和网站开发
  • 网站数据库地址是什么看企业网站怎么做到百度秒收
  • 南昌网站建设资讯wordpress dynamo
  • 网站建设招标样本南宁培训网站建设
  • 找回网站备案密码wordpress 2015主题
  • 网站电子商务平台建设域名查询系统
  • 设计制造中国第一架飞机的人是南宁百度快速优化
  • 淘宝联盟网站模板上海做企业网站
  • 繁体中文网站 怎么做wordpress禁止压缩图片
  • 怎么做图片网站百度云做.net网站
  • 长沙网上商城网站建设方案wordpress兼容mip
  • 横向网站模板上海 建筑
  • 手机wap网站程序上海网站制作库榆
  • 深圳网站建设 骏域网站建设推广软文范例大全500