7-4 二叉树最深间隔最远结点(Python)
给定一棵非空二叉树,数据域值为不等于0的整数。请编写程序找出其最深层间隔最远的两个结点,输出这两个结点差的绝对值。如图1所示的各二叉树最深层间隔最远的结点为5和8。如果最深层只有一个结点,则输出0。
输入格式:
输入为一组用空格间隔的整数,个数不超过200个,表示带空指针信息的二叉树先根序列,其中空指针信息用0表示。
输出格式:
输出为一个整数,为二叉树最深层间隔最远的两个结点差的绝对值,如果最深层只有一个结点,则输出0。
输入样例1:
1 2 0 5 0 0 3 6 0 0 8 0 0
结尾无空行
输出样例1:
在这里给出相应的输出。例如:
3
结尾无空行
输入样例2:
1 2 0 5 0 0 3 0 0
结尾无空行
输出样例2:
在这里给出相应的输出。例如:
0
结尾无空行
解析
一层层找就行,一个很简单的递归
class BinNode:
def __init__(self, data):
self.data = data
self.left = None
self.right = None
class BinTree:
def __init__(self, data):
self.root = BinNode(data)
self.trail = []
self.countLeafNumber = 0
def preprint(self, r):
if r is None:
return
print(r.data, end="")
self.preprint(r.left)
self.preprint(r.right)
def midPrint(self, r):
if r is None:
return
self.midPrint(r.left)
print(r.data, end="")
self.midPrint(r.right)
def endPrint(self, r):
if r is None:
return
self.endPrint(r.left)
self.endPrint(r.right)
print(r.data, end="")
def add(r, x, i):
if x[i] != "0":
r.left = BinNode(x[i])
i = add(r.left, x, i + 1)
# 根据填的内容判定是否要继续深入
# 如果是#,则看看右边
# 不然则继续走
i = i + 1
if x[i] != "0":
r.right = BinNode(x[i])
i = add(r.right, x, i + 1)
return i
def maxDistance(listNode):
flag = True
tempListNode = []
for i in listNode:
if i.left is not None or i.right is not None:
flag = False
if i.left is not None:
tempListNode.append(i.left)
if i.right is not None:
tempListNode.append(i.right)
if flag:
return eval(listNode[0].data) - eval(listNode[-1].data)
else:
max = maxDistance(tempListNode)
return max
inputString = input().split()
tree = BinTree(inputString[0])
add(tree.root, inputString, 1)
print(abs(maxDistance([tree.root])), end="")