栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

7-4 二叉树最深间隔最远结点

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

7-4 二叉树最深间隔最远结点

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="")

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1012973.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号