给定一个以顺序储存结构存储整数值的完全二叉树序列(最多1000个整数),请找出此完全二叉树的所有非叶子节点部分,然后采用后序遍历方式将此部分树(不包含叶子)输出。
1、只有一个节点的树,此节点认定为根节点(非叶子)。
2、此完全二叉树并非满二叉树,可能存在倒数第二层出现叶子或者无右叶子的情况
其他说明:二叉树的后序遍历是基于根来说的,遍历顺序为:左-右-根
输入描述:
- 一个通过空格分割的整数序列字符串
输出描述:
- 非叶子部分树结构
示例1
输入
1 2 3 4 5 6 7
输出
2 3 1
说明
找到非叶子部分树结构,然后采用后序遍历输出
备注:
输出数字以空格分隔
以下代码为本人原创,可以供大家参考,若有不足之处,感谢指出!!!!
class Tree:
def __init__(self, n):
self.val = n
self.left = None
self.right = None
nums = list(map(int, input().split()))
root = Tree(nums[0])
stack = [root]
i = 1
while i < len(nums):
stack1 = []
for node in stack:
if i < len(nums):
b = Tree(nums[i])
node.left = b
stack.append(b)
i += 1
if i < len(nums):
b = Tree(nums[i])
node.right = b
stack.append(b)
i += 1
else:
break
stack = stack1
res = [[root, root.left, root.right]]
while res:
res1 = []
for node in res:
if node[1]:
if node[1].left or node[1].right:
res1.append([node[1], node[1].left, node[1].right])
else:
node[0].left = None
if node[2]:
if node[2].left or node[2].right:
res1.append([node[2], node[2].left, node[2].right])
else:
node[0].right = None
res = res1
def dfs(node1):
if node1:
dfs(node1.left)
dfs(node1.right)
arr.append(node1.val)
arr = []
dfs(root)
print(' '.join(list(map(str, arr))))