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

ps网站设计全程绝密邯郸网站设计有哪些

ps网站设计全程绝密,邯郸网站设计有哪些,简历免费制作,青海网络推广公司给定一个二叉树的根节点root,返回它的中序遍历。 方法一#xff1a;递归 二叉树的中序遍历#xff1a;按照访问左子树——根节点——右子树的方式遍历这棵树#xff0c;而在访问左子树或者右子树的时候我们按照同样的方式遍历#xff0c;直到遍历完整棵树。因此整个遍历过…给定一个二叉树的根节点root,返回它的中序遍历。 方法一递归 二叉树的中序遍历按照访问左子树——根节点——右子树的方式遍历这棵树而在访问左子树或者右子树的时候我们按照同样的方式遍历直到遍历完整棵树。因此整个遍历过程天然具有递归的性质 运行过程 从根节点 1 开始 递归遍历左子树1 的左子树为空直接返回。 将 1 的值添加到结果列表 res 中res [1]。 递归遍历右子树1 的右子树是 2。 进入节点 2 递归遍历左子树2 的左子树是 3。 进入节点 3 递归遍历左子树3 的左子树为空直接返回。 将 3 的值添加到结果列表 res 中res [1, 3]。 递归遍历右子树3 的右子树为空直接返回。 将 2 的值添加到结果列表 res 中res [1, 3, 2]。 递归遍历右子树2 的右子树为空直接返回。 遍历结束返回结果 res [1, 3, 2] # Definition for a binary tree node. # class TreeNode(object): # def __init__(self, val0, leftNone, rightNone): # self.val val # self.left left # self.right right class Solution(object):def inorderTraversal(self, root)::type root: Optional[TreeNode]:rtype: List[int]res[] #存储遍历结果self.inorder(root,res) #中序遍历return resdef inorder(self,root,res): #递归函数用于实现中序遍历if not root: #如果当前节点 root 为空直接返回return self.inorder(root.left,res)res.append(root.val) #将当前节点的值 root.val 添加到结果列表 res 中self.inorder(root.right,res) 时间复杂度O(n)n为二叉树节点的个数 空间复杂度O(n) 方法二迭代 # Definition for a binary tree node. # class TreeNode(object): # def __init__(self, val0, leftNone, rightNone): # self.val val # self.left left # self.right right class Solution(object):def inorderTraversal(self, root)::type root: Optional[TreeNode]:rtype: List[int]res[] #空列表用于存储遍历结果stack[] #空列表用作栈来辅助遍历while root or stack: #当 root 不为空或栈 stk 不为空时继续循环while root: #当root不为空时将root推入栈stk中stack.append(root) #将 root 移动到其左子节点rootroot.left #将当前节点的所有左子节点推入栈中直到到达最左侧的节点rootstack.pop() #从栈 stk 中弹出栈顶节点赋值给 root,当前子树的最左侧节点res.append(root.val) #将当前节点 root 的值 root.val 添加到结果列表 res 中rootroot.right #将 root 移动到其右子节点return res 时间复杂度O(n) 空间复杂度O(n) 方法三Morris中序遍历 Morris 遍历算法是另一种遍历二叉树的方法它能将非递归的中序遍历空间复杂度降为O(1)。 Morris 遍历算法整体步骤如下假设当前遍历到的节点为x 1.如果x无左孩子先将x的值加入答案数组再访问x的右孩子即xx.right 2.如果x有左孩子则找到x左子树上最右的节点即左子树中序遍历的最后一个节点x,x在中序遍历中的前驱节点记为predecessor。根据predecessor的右孩子是否为空进行如下操作: 如果predecessor的右孩子为空则将其右孩子指向x然后访问x的左孩子即xx.left。 如果predecessor的右孩子不为空则此时其右孩子指向x说明已经遍历完x的左子树将predecessor的右孩子置空将x的值加入答案数组然后访问x的右孩子即xx.right。 # Definition for a binary tree node. # class TreeNode(object): # def __init__(self, val0, leftNone, rightNone): # self.val val # self.left left # self.right right class Solution(object):def inorderTraversal(self, root)::type root: Optional[TreeNode]:rtype: List[int]res[] #列表用来存储最终的中序遍历结果predcessorNone #当前节点的前驱节点即当前节点的左子树中最右边的节点while root: #只要当前节点不为空就继续遍历if root.left:predcessorroot.left #predecessor 节点就是当前 root 节点向左走一步然后一直向右走至无法走为止while predcessor.right and predcessor.right ! root:predcessorpredcessor.rightif predcessor.right is None: #predecessor 的右指针指向 root继续遍历左子树predcessor.rightroot #前驱节点的右子树为空把它的右子树指向当前节点 rootrootroot.left #移动到它的左子树继续遍历else:#前驱节点的右子树指向了当前节点说明左子树遍历完成可以访问当前节点res.append(root.val)predcessor.rightNone rootroot.rightelse:#当前节点没有左子树直接访问当前节点并将 root 移动到右子树res.append(root.val)rootroot.rightreturn res 时间复杂度O(n) 空间复杂度O(1)
http://www.w-s-a.com/news/767489/

相关文章:

  • 售后服务 网站建设阳江seo优化
  • 网站建设后怎么赚钱wordpress调用导航栏
  • 特产网站设计六色网站
  • 服务器网站备案做网站公司如何赚钱
  • 怎样进行站点优化荣成市有做网站的吗
  • 合肥建设工会网站芜湖做网站建设公司
  • 玉林市住房和城乡建设局网站网站开发百灵鸟
  • 网站怎么做双机房切换建设部网站2015年第158号
  • 郑州服务设计公司网站色块的网站
  • 网站设计所用到的技术做网站添加mp3
  • 凡科做的微网站怎样连接公众号seo李守洪排名大师
  • 温州网站开发网站的制作东莞寮步伟易达电子厂
  • 北京网站设计制作关键词优化微信小程序开发推广网站建设优化规划书
  • 杭州临平网站建设开发公司将购房款划给总公司的法律责任
  • 广东外贸网站推广分类wordpress
  • 聚美优品网站建设方案商城和营销型网站建设
  • 比较著名的seo网站如何建设网站?
  • 如何做商业网站最火wordpress主题
  • 建设网站需要哪些软硬件条件wordpress文章页标题优化
  • 网站建设功能需求文档wordpress 1g1核1m
  • 学做窗帘要下载哪个网站用户反馈数据分析软件园
  • 宁晋网站建设多少钱产品宣传推广方式有哪些
  • delphi做网站阿里巴巴官网首页登录入口
  • 游戏网站怎么建设新建wordpress模板
  • 网络服务器是指兰州网站seo诊断
  • 怎样做投资理财网站godaddy上传网站
  • 网站建设深圳哪家好世界500强企业招聘网站
  • 如何减少网站建设中的错误温州网站公司哪家好
  • 宜章网站建设北京定制公交网站
  • 怎么让谷歌收录我的网站郑州网站建设更好