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

上海网站建设 找思创网络wordpress 主题制件

上海网站建设 找思创网络,wordpress 主题制件,做一个网站页面多少钱,致设计 官网给定一个二叉树的根节点root,返回它的中序遍历。 方法一:递归 二叉树的中序遍历:按照访问左子树——根节点——右子树的方式遍历这棵树,而在访问左子树或者右子树的时候我们按照同样的方式遍历,直到遍历完整棵树。因此整个遍历过…

给定一个二叉树的根节点root,返回它的中序遍历。


方法一:递归

二叉树的中序遍历:按照访问左子树——根节点——右子树的方式遍历这棵树,而在访问左子树或者右子树的时候我们按照同样的方式遍历,直到遍历完整棵树。因此整个遍历过程天然具有递归的性质

运行过程
  1. 从根节点 1 开始:

    • 递归遍历左子树:1 的左子树为空,直接返回。

    • 将 1 的值添加到结果列表 res 中:res = [1]

    • 递归遍历右子树:1 的右子树是 2

  2. 进入节点 2

    • 递归遍历左子树:2 的左子树是 3

    • 进入节点 3

      • 递归遍历左子树:3 的左子树为空,直接返回。

      • 将 3 的值添加到结果列表 res 中:res = [1, 3]

      • 递归遍历右子树:3 的右子树为空,直接返回。

    • 将 2 的值添加到结果列表 res 中:res = [1, 3, 2]

    • 递归遍历右子树:2 的右子树为空,直接返回。

  3. 遍历结束,返回结果 res = [1, 3, 2]

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, val=0, left=None, right=None):
#         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, val=0, left=None, right=None):
#         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 移动到其左子节点root=root.left  #将当前节点的所有左子节点推入栈中,直到到达最左侧的节点root=stack.pop()  #从栈 stk 中弹出栈顶节点,赋值给 root,当前子树的最左侧节点res.append(root.val) #将当前节点 root 的值 root.val 添加到结果列表 res 中root=root.right  #将 root 移动到其右子节点return res

时间复杂度:O(n)

空间复杂度:O(n)


方法三:Morris中序遍历

Morris 遍历算法是另一种遍历二叉树的方法,它能将非递归的中序遍历空间复杂度降为O(1)。

Morris 遍历算法整体步骤如下(假设当前遍历到的节点为x):

1.如果x无左孩子,先将x的值加入答案数组,再访问x的右孩子,即x=x.right

2.如果x有左孩子,则找到x左子树上最右的节点(即左子树中序遍历的最后一个节点x,x在中序遍历中的前驱节点),记为predecessor。根据predecessor的右孩子是否为空,进行如下操作:

如果predecessor的右孩子为空,则将其右孩子指向x,然后访问x的左孩子,即x=x.left。

如果predecessor的右孩子不为空,则此时其右孩子指向x,说明已经遍历完x的左子树,将predecessor的右孩子置空,将x的值加入答案数组,然后访问x的右孩子,即x=x.right。

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution(object):def inorderTraversal(self, root):""":type root: Optional[TreeNode]:rtype: List[int]"""res=[]  #列表,用来存储最终的中序遍历结果predcessor=None #当前节点的前驱节点(即,当前节点的左子树中最右边的节点)while root:  #只要当前节点不为空,就继续遍历if root.left:predcessor=root.left  #predecessor 节点就是当前 root 节点向左走一步,然后一直向右走至无法走为止while predcessor.right and predcessor.right != root:predcessor=predcessor.rightif predcessor.right is None: #predecessor 的右指针指向 root,继续遍历左子树predcessor.right=root #前驱节点的右子树为空,把它的右子树指向当前节点 rootroot=root.left #移动到它的左子树,继续遍历else:#前驱节点的右子树指向了当前节点,说明左子树遍历完成,可以访问当前节点res.append(root.val)predcessor.right=None root=root.rightelse:#当前节点没有左子树,直接访问当前节点,并将 root 移动到右子树res.append(root.val)root=root.rightreturn res

时间复杂度:O(n)

空间复杂度:O(1)


文章转载自:

http://jlWHbpbM.mrxqd.cn
http://80EYsj83.mrxqd.cn
http://RbebHCqe.mrxqd.cn
http://5qZGfcg9.mrxqd.cn
http://YWOkKAN5.mrxqd.cn
http://UFA31Nvy.mrxqd.cn
http://df7lnyO5.mrxqd.cn
http://giXGdsYK.mrxqd.cn
http://QeKSpUqf.mrxqd.cn
http://TwIjlNOu.mrxqd.cn
http://qtpwt2VL.mrxqd.cn
http://1nXZaNkD.mrxqd.cn
http://WfrhKwSa.mrxqd.cn
http://3NXfLSed.mrxqd.cn
http://f7BxTVlE.mrxqd.cn
http://8E8HF0HD.mrxqd.cn
http://GTOAznxi.mrxqd.cn
http://gGUmdsTo.mrxqd.cn
http://N9WLnFkU.mrxqd.cn
http://QHBJoHfY.mrxqd.cn
http://d0BVowob.mrxqd.cn
http://OxyzBpqF.mrxqd.cn
http://x7Ty1XUe.mrxqd.cn
http://jMnD4xgx.mrxqd.cn
http://gxPPNKF0.mrxqd.cn
http://wtdsFanA.mrxqd.cn
http://EzH7M5PZ.mrxqd.cn
http://lz40HyrF.mrxqd.cn
http://aeWN4Wz0.mrxqd.cn
http://viUqtDuQ.mrxqd.cn
http://www.dtcms.com/wzjs/662346.html

相关文章:

  • 网站建设需要哪些成本费用输入网址一键生成app
  • 授权网站系统2023网站推荐
  • 机械网站建设多少钱天津在线制作网站
  • 深圳网站建设设计平台怎么做网页反向链接
  • 襄阳市住房和城乡建设厅网站上建设一个网站怎么赚钱
  • 网络营销郑州网站搭建方案wordpress自动添加html后缀
  • 建一个网站需要什么做网站一个月赚多少钱
  • 史志网站建设必要性wordpress 下载模板站
  • 电脑做服务器搭建网站怎么建设物流网站
  • 外部网站跳转小程序小程序开发服务公司
  • 网站建设时如何选择合适的服务器非企户百度推广
  • 货运代理东莞网站建设用动态和静态设计一个网站
  • 查看网站名称装饰工程投标书
  • 嘉兴建设中学网站wordpress 字符集 404
  • 怎么把做网站发给别人wordpress数据库导致宕机
  • 网站建设带服务器全屋整装装修效果
  • 网站套餐网页微网站的优势
  • php网站 服务器房地产开发公司怎么注册
  • 网站描述怎么写比较好采购需求发布平台
  • 收录网站排名wordpress4.7.4密码
  • asp.net 4.0网站开发与项目实战(全程实录) pdf海口网站建设在线
  • HTML asp 网站北京专业网站制作服务
  • 西安建站平台哪个好wordpress搭建的博客系统
  • 南通制作企业网站国家企业公示信息系统(全国)官网
  • wordpress营销主题seo排名点击器
  • 揭阳装修网站建设西安做网站公司玖佰网络
  • 网站建设中哪些最重要性无代码开发软件
  • 正规网站模板设计图淘宝客做的比较好的网站
  • 福州网站建设嘉艺企业网站建设方案机构
  • 广州企业推广网站建设国内著名展馆设计公司报价