0094-leetcode算法实现之二叉树中序遍历-二叉树-有序遍历-皮通戈朗实现
给定一个二叉树的根节点根,返回它的中序遍历。
示例1:
输入:root=[1,null,2,3]
输出:[1,3,2]
示例2:
输入:root=[]
输出:[]
示例3:
输入:root=[1]
输出:[1]
示例4:
输入:root=[1,2]
输出:[2,1]
示例5:
输入:root=[1,null,2]
输出:[1,2]
提示:
树中节点数目在范围[0, 100] 内
-100=节点值=100
进阶:递归算法很简单,你可以通过迭代算法完成吗
来源:力扣(LeetCode)
链接:https://leet代码-cn。com/problems/二叉树-有序遍历
python
# 0094.二叉树中序遍历
# 递归迭代
类别解决方案:
def inoderrecury(self,head: TreeNode) - int:
'''
递归遍历,LNR,左根右
:参数标题:
:return:
'''
极好的遍历(头部):
# 递归终止条件
如果head==None:
返回
遍历(头向左)
打印(head.val ' ')
res.append(head.val)
遍历(头向右)
res=[]
遍历(头部)
返回资源
def inoderation(self,head: TreeNode):
'''
迭代遍历,LNR,左根右
:参数标题:
:return:
'''
如果head==None:
返回
曲面=头部
stack=[]
res=[]
当弯曲或堆叠时:
# 先迭代访问最底层的左子树节点
if cur:
堆栈。追加(当前)
cur=cur。左侧
# 到达最左节点后处理栈顶节点
else:
cur=stack.pop()
res.append(cur.val)
# 取栈顶元素的右节点
cur=cur。右
返回资源
golang
包装主体
导入"容器/列表"
//二叉树的中序遍历-递归迭代
//递归遍历
func inodertraversation(根*树节点)[]int {
//递归遍历,LNR,左根右
var res=[]int{}
var inoder func(节点*树节点)
inoder=func(node * TreeNode){ 0
如果节点==零
返回
}
节点。左)
res=追加(res,节点瓦尔)
节点。右)
}
无机(根)
返回资源
}
//迭代遍历LNR左中右左根右
func Inorder(root * TreeNode)[]int {
var res=[]int{}
if root==nil {
返回零
}
堆栈:=列表新()//创建链表容器
节点:=根
//1.先将所有的左节点找到,压入栈中
对于节点!=零
堆栈。推回(节点)
节点=节点。左边的
}
//2.对栈中的每个节点先弹出加入到表示留数中,再找到该节点的右节点的所有左节点加入栈中
对于堆栈.len(){ 0
e :堆栈。后退()
节点:=e.Value.(*TreeNode)
堆栈。删除(e)
//找到该节点的右节点,再搜索其所有的左节点加入栈中
res=追加(res,节点瓦尔)
节点=节点。对吧
对于节点!=零
堆栈。推回(节点)
节点=节点。左边的
}
}
返回资源
}
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/84597.html