定义二叉树建立函数 createBT(self Root),建立一棵二叉树: 2)定义递归函数 preOrder(self, Root),输出二叉树的先序遍历序列: 3)定义递归函数postOrder(self, Root),输出二叉树的中序遍历序列; 4)定义递归函数middleOrder(self,Root),输出二叉树的后序遍历序列:, 5)定义函数 levelOrder(self, Root),输出二叉树的层次遍历。 6)参照层次遍历函数,定义一个新函数findBT(self, Root, X),输入一个指定的字符x,在指定的一棵二叉树中查找值为 x 的结点,如果查找成功,则输出“OK”,否则输出 ‘‘ERROR”; 7)参照层次遍历函数,定义一个新函数 countNode(self, Root),求二叉树的节点个数:8) 参照层次遍历函数,定义一个新函数 countLeafNode(self, Root),求二叉树的叶子节点的个数。 9)定义和执行主函数main(),在主函数中,依次调用上面8个函数,实现二叉树的创建、遍历、节点查找、节点统计等
时间: 2024-03-18 18:42:08 浏览: 81
二叉树的几种操作,包括递归先序建立二叉树、先序遍历、中序遍历、后序遍历、非递归的各种遍历
代码如下:
```
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
class BinaryTree:
def __init__(self, Root):
self.root = Root
def createBT(self, Root):
val = input("请输入节点的值:")
if val == "#":
Root = None
else:
Root = TreeNode(val)
Root.left = self.createBT(Root.left)
Root.right = self.createBT(Root.right)
return Root
def preOrder(self, Root):
if Root:
print(Root.val, end=" ")
self.preOrder(Root.left)
self.preOrder(Root.right)
def inOrder(self, Root):
if Root:
self.inOrder(Root.left)
print(Root.val, end=" ")
self.inOrder(Root.right)
def postOrder(self, Root):
if Root:
self.postOrder(Root.left)
self.postOrder(Root.right)
print(Root.val, end=" ")
def levelOrder(self, Root):
if not Root:
return []
res = []
queue = [Root]
while queue:
level = []
for i in range(len(queue)):
node = queue.pop(0)
level.append(node.val)
if node.left:
queue.append(node.left)
if node.right:
queue.append(node.right)
res.append(level)
return res
def findBT(self, Root, X):
if not Root:
return "ERROR"
if Root.val == X:
return "OK"
left = self.findBT(Root.left, X)
right = self.findBT(Root.right, X)
if left == "OK" or right == "OK":
return "OK"
else:
return "ERROR"
def countNode(self, Root):
if not Root:
return 0
return 1 + self.countNode(Root.left) + self.countNode(Root.right)
def countLeafNode(self, Root):
if not Root:
return 0
if not Root.left and not Root.right:
return 1
else:
return self.countLeafNode(Root.left) + self.countLeafNode(Root.right)
if __name__ == "__main__":
binaryTree = BinaryTree(None)
Root = binaryTree.createBT(binaryTree.root)
print("先序遍历序列:", end="")
binaryTree.preOrder(Root)
print("\n中序遍历序列:", end="")
binaryTree.inOrder(Root)
print("\n后序遍历序列:", end="")
binaryTree.postOrder(Root)
print("\n层次遍历结果:", binaryTree.levelOrder(Root))
X = input("请输入需要查找的值:")
print(binaryTree.findBT(Root, X))
print("节点个数:", binaryTree.countNode(Root))
print("叶子节点个数:", binaryTree.countLeafNode(Root))
```
注意:代码中使用 # 表示空节点。
阅读全文