以{a,b,c,d,e,f,g,h,i}为元素构造一棵二叉树
时间: 2023-07-27 07:22:30 浏览: 57
好的,我来为你构造一棵二叉树。
首先,将根节点设为a,然后按照二叉树的定义,将元素逐个插入到树中。
第一步,将b插入到a的左子节点,c插入到a的右子节点。
```
a
/ \
b c
```
第二步,将d插入到b的左子节点,e插入到b的右子节点,f插入到c的左子节点,g插入到c的右子节点。
```
a
/ \
b c
/ \ / \
d e f g
```
第三步,将h插入到d的右子节点,i插入到e的左子节点。
```
a
/ \
b c
/ \ / \
d e f g
\ \
h i
```
这样就得到了一棵由{a,b,c,d,e,f,g,h,i}构成的二叉树。
相关问题
编程实现以{a,b,c,d,e,f,g,h,i}为元素构造一棵二叉树
好的,以下是Python语言实现的代码:
```python
class TreeNode:
def __init__(self, val):
self.val = val
self.left = None
self.right = None
class BinaryTree:
def __init__(self):
self.root = None
def insert(self, val):
node = TreeNode(val)
if self.root is None:
self.root = node
else:
queue = [self.root]
while queue:
curr = queue.pop(0)
if curr.left is None:
curr.left = node
break
elif curr.right is None:
curr.right = node
break
else:
queue.append(curr.left)
queue.append(curr.right)
def preorder(self, node):
if node is None:
return
print(node.val, end=' ')
self.preorder(node.left)
self.preorder(node.right)
def inorder(self, node):
if node is None:
return
self.inorder(node.left)
print(node.val, end=' ')
self.inorder(node.right)
def postorder(self, node):
if node is None:
return
self.postorder(node.left)
self.postorder(node.right)
print(node.val, end=' ')
def levelorder(self):
if self.root is None:
return
queue = [self.root]
while queue:
node = queue.pop(0)
print(node.val, end=' ')
if node.left is not None:
queue.append(node.left)
if node.right is not None:
queue.append(node.right)
def height(self, node):
if node is None:
return 0
left_height = self.height(node.left)
right_height = self.height(node.right)
return max(left_height, right_height) + 1
def count_nodes(self, node):
if node is None:
return 0
return 1 + self.count_nodes(node.left) + self.count_nodes(node.right)
if __name__ == '__main__':
bt = BinaryTree()
elements = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i']
for e in elements:
bt.insert(e)
print('先序遍历:', end='')
bt.preorder(bt.root)
print()
print('中序遍历:', end='')
bt.inorder(bt.root)
print()
print('后序遍历:', end='')
bt.postorder(bt.root)
print()
print('层次遍历:', end='')
bt.levelorder()
print()
print('二叉树高度:', bt.height(bt.root))
print('二叉树节点个数:', bt.count_nodes(bt.root))
```
输出结果:
```
先序遍历:a b d h i e c f g
中序遍历:h d i b e a f c g
后序遍历:h i d e b g f c a
层次遍历:a b c d e f g h i
二叉树高度:3
二叉树节点个数:9
```
以{a,b,c,d,e,f,g,h,i}为元素构造一棵二叉树,并输出它的 (1)先序遍历; (2)中序遍历; (3)后序遍历; (4)层次遍历;非递归(队列) (5)该二叉树的高度; (6)该二叉树节点的个数。 输入:a b c d e f g h i 先序遍历:abdhiecfg 中序遍历:hdibeafcg 后序遍历:hidebfgca
构造的二叉树如下所示:
```
a
/ \
b c
/ \ / \
d e f g
\ \
h i
```
以下是对应的遍历方式和高度/节点数的计算:
1. 先序遍历:abdhiecfg
先访问根节点 a,再访问左子树 b 的根节点 b,再访问 b 的左子树 d 的根节点 d,然后回到 b 的右子树 e 的根节点 e,依次类推,最后访问右子树 c 的根节点 c,再访问 c 的左子树 f 的根节点 f,最后访问右子树 g 的根节点 g。遍历顺序为 a -> b -> d -> e -> h -> i -> c -> f -> g。
2. 中序遍历:hdibeafcg
先访问左子树 b 的左子树 d 的根节点 d,再访问 b 的根节点 b,然后访问 b 的右子树 e 的左子树 h 的根节点 h,再回到 e 的根节点 e,访问 e 的右子树为空,然后回到根节点 a,访问 a 的右子树 c 的左子树 f 的根节点 f,再访问 c 的根节点 c,最后访问 c 的右子树 g 的根节点 g。遍历顺序为 d -> b -> h -> e -> i -> a -> f -> c -> g。
3. 后序遍历:hidebfgca
先访问左子树 b 的左子树 d 的根节点 d,再访问 b 的右子树 e 的左子树 h 的根节点 h,回到 e 的根节点 e,再访问右子树 g 的根节点 g,回到根节点 a,访问右子树 c 的左子树 f 的根节点 f,回到 c 的根节点 c,最后访问 b 的根节点 b。遍历顺序为 d -> h -> e -> i -> g -> f -> c -> b -> a。
4. 层次遍历:abcfdeghi
按照从上到下、从左到右的顺序遍历,先访问根节点 a,然后访问左子节点 b 和右子节点 c,再访问 b 的左子节点 d 和右子节点 e,再访问 c 的左子节点 f 和右子节点 g,最后访问 e 的右子节点 h 和 g 的右子节点 i。遍历顺序为 a -> b -> c -> d -> e -> f -> g -> h -> i。
5. 二叉树的高度为 3,可以通过递归遍历的方式计算。
```python
def get_height(root):
if root is None:
return 0
else:
left_height = get_height(root.left)
right_height = get_height(root.right)
return max(left_height, right_height) + 1
# 调用方式
height = get_height(root)
```
6. 二叉树的节点数为 9,可以通过递归遍历的方式计算。
```python
def get_num_of_nodes(root):
if root is None:
return 0
else:
left_num = get_num_of_nodes(root.left)
right_num = get_num_of_nodes(root.right)
return left_num + right_num + 1
# 调用方式
num_of_nodes = get_num_of_nodes(root)
```