二叉树的前序遍历:
解法:栈
迭代至栈或指针为空,向左 进行深度遍历 因前序为根–左--右,所以对每一不为空的节点入栈,并返回值
不断深度遍历,直至节点左指针left为空,则进行退栈,获取上一有效节点右指针right。如若右指针也为空,则再次退栈,检索上一节点的右指针
如若不为空,则返回其值,并入栈,并检索左节点,为空退栈检索右节点,也为空,则退栈。因其父节点已退栈,所以栈顶元素为其父节点的父节点,即开始遍历右子树。
直至栈及未遍历的节点为空,返回值
代码如下:
class Solution:
def preorderTraversal(self, root: TreeNode) -> List[int]:
stack=[]
rtn=[]
while stack or root:
if root:
rtn.append(root.val)
stack.append(root)
root=root.left
else:
flag=stack.pop()
root=flag.right
return rtn