最近发现python写OJ很方便,试了一下树的遍历。
树的结构:
class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
前序遍历:
递归的方法:(这个递归在自己电脑上测试是没问题的,网友测试也没问题,不知为啥leetcode不通过)
class Solution:
# @param root, a tree node
# @return a list of integers
def preorderTraversal(self, root,result=[]):
if root==None:
return result
else:
result.append(root.val)
Solution.preorderTraversal(self,root.left,result)
Solution.preorderTraversal(self,root.right,result)
return result
递归其实没什么好讲的,就是套用递归的一个模型:
void func( mode){
if(endCondition)
{
constExpression //基本项
}
else
{
accumrateExpreesion //归纳项
mode=expression //步进表达式
func(mode) / /调用本身,递归
}
}
具体的按照需求往里套一套,树的遍历的递归还是很好理解的,前序遍历就是按照前序遍历的概念来的,先访问根节点,如果左子树不为空,则前序遍历左子树,否则前序遍历右子树。
下面具体说一说非递归的前序遍历,也就是题目要求的方法,先上代码。
代码1
class Solution:
# @param root, a tree node
# @return a list of integers
def preorderTraversal(self, root):
stack=[] #模拟栈的list
result=[] #存放结果的list
if root!=None:
stack.append(root)
while len(stack)!=0:
l