生成代码:问题描述】设二叉树按二叉链表存放,写算法判别一棵二叉树是否是一棵正则二叉树。正则二叉树是指在二叉树中不存在子树个数为1的结点。 【输入说明】二叉树的前序和中序遍历序列,以此构造二叉树的链式存储 【输出说明】若该二叉树是一棵正则二叉树,则输出Yes,否则输出No 【样例输入】 ABHDCEFG HBDAEFCG 【样例输出】 No
时间: 2023-11-28 09:06:41 浏览: 84
以下是Python实现该算法的代码:
```python
class Node:
def __init__(self, data):
self.data = data
self.left = None
self.right = None
def buildTree(preorder, inorder):
if not inorder:
return None
rootData = preorder[0]
root = Node(rootData)
inorderIndex = inorder.index(rootData)
leftInorder = inorder[:inorderIndex]
rightInorder = inorder[inorderIndex+1:]
leftPreorder = preorder[1:len(leftInorder)+1]
rightPreorder = preorder[len(leftInorder)+1:]
root.left = buildTree(leftPreorder, leftInorder)
root.right = buildTree(rightPreorder, rightInorder)
return root
def isRegularTree(root):
if not root:
return True
if not root.left and not root.right:
return True
if root.left and root.right:
return isRegularTree(root.left) and isRegularTree(root.right)
return False
preorder = input().strip()
inorder = input().strip()
root = buildTree(preorder, inorder)
if isRegularTree(root):
print("Yes")
else:
print("No")
```
该算法首先利用前序和中序遍历序列构造二叉树。然后,判断每一个结点是否存在子树个数为1的情况,如果存在则返回False,否则返回True。最后根据返回值输出Yes或No。
阅读全文