二叉树的几个基础遍历算法代码
2016-02-04 11:41
519 查看
先序遍历
# Definition for a binary tree node # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solution: # @param root, a tree node # @return a list of integers def preorderTraversal(self, root): stack = [] ret = [] while root or len(stack): if root: stack.append(root) ret.append(root.val) root = root.left else: root = stack.pop() root = root.right return ret
后序遍历
# Definition for a binary tree node # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solution: # @param root, a tree node # @return a list of integers def postorderTraversal(self, root): s=[] ret=[] s.append(root) curTree=None preTree=None while 0 != len(s): curTree=s[-1] if None == curTree: return ret if( (None==curTree.left and None==curTree.right) or (None != preTree and (preTree==curTree.left or preTree==curTree.right)) ): ret.append(curTree.val) s.pop() preTree=curTree else: if None != curTree.right: s.append(curTree.right) if None != curTree.left: s.append(curTree.left) return ret
中序遍历
# Definition for a binary tree node # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solution: # @param root, a tree node # @return a list of integers def inorderTraversal(self, root): stack=[] ret = [] while root or len(stack): if root: stack.append(root) root=root.left else: tmp = stack.pop() root = tmp.right ret.append(tmp.val) return ret
相关文章推荐
- AVL树-自平衡二叉查找树(Java实现)
- 书评:《算法之美( Algorithms to Live By )》
- 动易2006序列号破解算法公布
- 文件遍历排序函数
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- Lua 学习笔记之C API 遍历 Table实现代码
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- C#遍历文件夹后上传文件夹中所有文件错误案例分析
- C#中遍历Hashtable的4种方法
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C#实现的算24点游戏算法实例分析
- Erlang中遍历取出某个位置的最大值代码
- c语言实现的带通配符匹配算法
- 浅析STL中的常用算法
- C++实现图的邻接矩阵存储和广度、深度优先遍历实例分析
- 算法之排列算法与组合算法详解