问题描达】设一叉树按一叉链表仔放,写算法判别一 楔一又树是否是一 棵正则一叉树。正则一叉树是指在一叉树中不存在子树个数为1的结点。 【输入说明】一叉树的前序和中序遍历序列,以止构造一叉树的链式存储 【输出说明】若该二叉树是一棵工则一叉树,则输出Yes,否则输出N。 [样例输入7 ABHDCEFG HBDAEFCG 【样例输出》 No
时间: 2024-02-01 12:15:00 浏览: 81
编写采用二叉链表形式存储的二叉树的创建、先序、中序、后序和按层遍历的算法
5星 · 资源好评率100%
以下是 Python 代码实现:
```python
class TreeNode:
def __init__(self, val):
self.val = val
self.left = None
self.right = None
def build_tree(preorder, inorder):
if not inorder:
return None
root_val = preorder.pop(0)
root = TreeNode(root_val)
index = inorder.index(root_val)
root.left = build_tree(preorder, inorder[:index])
root.right = build_tree(preorder, inorder[index+1:])
return root
def is_regular_tree(root):
if not root:
return True
if root.left and not root.right:
if root.left.left or root.left.right:
return False
if root.right and not root.left:
if root.right.left or root.right.right:
return False
return is_regular_tree(root.left) and is_regular_tree(root.right)
preorder = list(input())
inorder = list(input())
root = build_tree(preorder, inorder)
if is_regular_tree(root):
print("Yes")
else:
print("No")
```
算法思路:
首先根据前序遍历和中序遍历构建二叉树。然后递归判断每个节点是否符合正则二叉树的定义,即不存在子树个数为 1 的节点。如果存在子树个数为 1 的节点,则返回 False。最后递归到叶子节点时返回 True,表示该二叉树是一棵正则二叉树。
阅读全文