要求在现有代码上修改,正确的返回前序遍历;再请提供一个深度方法,完善在solution类中
class TreeNode:
def __init__(self, val, left=None, right=None):
self.val = val
self.left = left
self.right = right
class Solution:
def __init__(self,val=None):
self.root = TreeNode(val)
def insertLeft(self, item):
node = TreeNode(item)
if self.root.left is None:
self.root.left = node
else:
t = node
t.left = self.root.left
self.root.left = t
def insertRight(self, newitem):
node = TreeNode(newitem)
if self.root.right == None:
self.root.right = node
else:
t = node
t.right = self.root.right
self.root.right = t
def getLeftchild(self):
return self.root.left
def getRightchild(self):
return self.root.right
def getRootVal(self):
return self.root.val
def preorderTraversal(self):
if not self.root:
return []
# 前序递归
return [self.root.val] + self.preorderTraversal(self.getLeftchild()) + self.preorderTraversal(self.getRightchild())
#深度算法
def depth(self):
if __name__ == '__main__':
b = Solution('A')
b.insertLeft('a')
b.insertRight('b')
print(b.preorderTraversal())
深搜要用到栈。
对于任意一棵树,都可以这样进行操作。
举例:
深搜算法
A入栈。【A】
A有结点? 有B, B入栈。【A,B】
B有结点? 有D, D入栈。【A,B,D】
D有结点? 无,D出栈。【A,B】
B有结点? 有F, F入栈 【A,B,F】
F有结点? 无,F出栈【A,B】
B有结点? 无,B出栈 【A】
A有结点? 有C,C入栈 【A,C】
C有结点? 无。C出栈 【A】
A有结点? 无,A出栈【】