思路一:
class Solution:
def inorderTraversal(self, root: TreeNode) -> List[int]:
res=[]
self.centertrave(root,res)
return res
def centertrave(self,root,res):
if root:
self.centertrave(root.left,res)#元素为空会退出来,并返回中间res
res.append(root.val)
print(res)
self.centertrave(root.right,res)
图解代码运行过程:
思路二:
class Solution:
def inorderTraversal(self, root: TreeNode) -> List[int]:
res=[]
self.centertrave(root,res)
return res
def centertrave(self,root,res):
if root:
self.centertrave(root.left,res)#元素为空会退出来,并返回中间res
res.append(root.val)
print(res)
self.centertrave(root.right,res)
图解代码运行过程:
思路三:
#思路三与思路二结点遍历流程差不多,但是操作上略有不同
class Solution(object):
def inorderTraversal(self, root):
res, stack = [], []
while stack or root:
if root:
stack.append(root)
root = root.left#一直遍历到左子树的根结点
else:
node = stack.pop()#元素不存在,已经放过结点了
res.append(node.val)
root = node.right#遍历右子树
return res
座右铭:站在别人的思想上,看见自己的不足,传播错误的经验,愿君不重蹈覆辙。
由于受限于本人经验,难免不足,如有建议,欢迎留言交流。
说明:
1.上面的图解步骤是本人在脑海中演算的,与当时的思考情况,仅仅作为理解的参考。
2.箭头代表了运行方向,数字代表了运行顺序。
3.之所以做这个,是因为本人对于二叉树的理解只能停留在“表面理解上”,对于里面究竟是怎么遍历的不清楚,所以就以题目给的例子,做了图解运行过程。
4.如果对您有帮助,请点赞,您的鼓励是本人前进的最好动力。
5.这里由于是对以前本人不理解代码的重新理解,所以省略了很多内容说明,详情请见本人博客链接。https://blog.csdn.net/qq_41827968/article/details/89458655