博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
二叉树遍历
阅读量:4043 次
发布时间:2019-05-24

本文共 1811 字,大约阅读时间需要 6 分钟。

递归

先序遍历--根左右

def preOrder(root):    if not root:        return None    print(root.val)    preOrder(root.left)    preOrder(root.right)

中序遍历-左根右

def inOrder(root):    if not root:        return None    inOrder(root.left)    print(root.val)    inOrder(root.right)

 后序遍历-左右根

def postOrder(root):    if not root:        return None    postOrder(root.left)    postOrder(root.right)    print(root.val)

 

非递归

先序遍历

def preOrder(root):    stack = [root]    while stack : #len(stack ) > 0        print(root.val)        if root.right :  #最后遍历所以先放进去            stack.append(root.right)        if root.left :            stack.append(root.left)        root= stack.pop()

中序遍历

def inOrder(root):    stack = []    p= root    while p or stack: #p is not None or len(stack) > 0        if p:            stack.append(p)            p= p.left #不断向左深入        else:            p= stack.pop()            print(p.val)            p= p.right #根遍历后向右

后序遍历

# 使用两个栈结构# 第一个栈进栈顺序:先序遍历跟->左->右  # 第二个栈=第一个栈pop顺序: 跟->右->左# 最后第二个栈依次出栈 左->右->跟def postOrder(root):    stack = [root]    stack2 = []    while len(stack) > 0:        root= stack.pop() #根先弹出        stack2.append(root)        if root.left:#左边最后弹出            stack.append(root.left)        if root.right :            stack.append(root.right)    while stack2: #len(stack2) > 0:        print(stack2.pop().val)

层次遍历

def levelOrder( root) :        #先遍历后面再返回 一个节点 一个存储  一个temp        if not root:return []        res=[]        nodeLayer=[root]        while nodeLayer:            tempval=[] #存储值            tempNode=[] #存储节点            for node in nodeLayer: #每层的值和节点更新                tempval.append(node.val)                if node.left:tempNode.append(node.left)                if node.right:tempNode.append(node.right)            nodeLayer=tempNode            res.append(tempval)        return res

 

转载地址:http://qlhdi.baihongyu.com/

你可能感兴趣的文章
使用 Springboot 对 Kettle 进行调度开发
查看>>
一文看清HBase的使用场景
查看>>
解析zookeeper的工作流程
查看>>
搞定Java面试中的数据结构问题
查看>>
慢慢欣赏linux make uImage流程
查看>>
linux内核学习(7)脱胎换骨解压缩的内核
查看>>
以太网基础知识
查看>>
慢慢欣赏linux 内核模块引用
查看>>
kprobe学习
查看>>
慢慢欣赏linux phy驱动初始化2
查看>>
慢慢欣赏linux CPU占用率学习
查看>>
2020年终总结
查看>>
Homebrew指令集
查看>>
React Native(一):搭建开发环境、出Hello World
查看>>
React Native(二):属性、状态
查看>>
JSX使用总结
查看>>
React Native(四):布局(使用Flexbox)
查看>>
React Native(七):Android双击Back键退出应用
查看>>
Android自定义apk名称、版本号自增
查看>>
adb command not found
查看>>