当前位置: 首页 > 后端技术 > Python

LeetCode94-BinaryTreeInorderTraversal

时间:2023-03-26 16:22:01 Python

题目:给定一棵二叉树,返回它的中序遍历。给定一棵二叉树,返回其节点值的中序遍历。示例:输入:[1,null,2,3]1\2/3输出:[1,3,2]高级:递归算法很简单,你能用迭代算法来做吗?Followup:递归求解是微不足道的,你能迭代吗?解题思路:百度百科:二叉树的中序遍历:https://baike.baidu.com/item/中序遍历遍历顺序:左子节点-->根节点-->右子节点为的二叉树如下:A/\BC/\/\DEFG遍历顺序为:D->B->E->A->F->C->G二叉树遍历可以用DFS(深度优先搜索)来完成,这是通过以下方式实现的:在数据结构堆栈的帮助下进行递归或迭代。这种遍历方式本质上是一种先进后出的栈遍历方式,而递归的方式实际上是通过递归的方式来实现栈的先进后出。DFS-recursion:Java:classSolution{publicListinorderTraversal(TreeNoderoot){Listlist=newArrayList<>();//Arraydfs_recursion(root,list);//传入递归函数返回列表;}privatevoiddfs_recursion(TreeNodenode,Listlist){if(node==null)return;//基线条件dfs_recursion(node.left,list);//先遍历左子节点list.add(node.val);//遍历到左子节点的顶点,取出节点的值dfs_recursion(node.right,list);//递归遍历右节点}}Python3:class解决方法:definorderTraversal(self,root:TreeNode)->List[int]:#arrayres=list()#传入递归函数self.dfs_recursion(root,res)returnresdefdfs_recursion(self,node:TreeNode,res:List[int]):#baselineconditionifnotnode:return#递归遍历左子节点self.dfs_recursion(node.left,res)#取顶点节点的值res.append(node.val)#递归遍历右子节点子节点self.dfs_recursion(node.right,res)DFS-Iteration:Java:classSolution{publicListinorderTraversal(TreeNoderoot){Listlist=newArrayList<>();//arrayif(root==null)returnlist;Stackstack=newStack<>();//使用数据结构stack暂存节点TreeNodecur=root;//定义当前节点while(!stack.isEmpty()||cur!=null){//循环条件:栈不为空或当前节点不为空if(cur!=null){//当前节点不为空时stack.push(cur);//当前节点被压入intothestackcur=cur.left;//刷新当前节点}else{//当前节点为空时cur=stack.pop();//当前节点的父节点出栈list.add(cur.val);//节点中存放的数组的值cur=cur.right;刷新当前节点}}返回列表;}}Python:classSolution:definorderTraversal(self,root:TreeNode)->List[int]:#初始化数组,stackres,stack=list(),list()#当前节点指向根节点cur=root#递归条件为:stackor当前节点不为空whilestackorcur:ifcur:#当前节点不为空时,pushstack.append(cur)#刷新当前节点cur=cur.leftelse:#当当前节点为空时,其父节点出栈cur=stack.pop()#将值存入数组res.append(cur.val)#刷新当前节点cur=cur.rightreturnres大家一起学习,欢迎关注:爱写Bug