有一棵二叉树,树上每个点标有权值,权值各不相同,请设计一个算法算出权值最大的叶节点到权值最小的叶节点的距离。二叉树每条边的距离为1,一个节点经过多少条边到达另一个节点为这两个节点之间的距离。
给定二叉树的根节点root,请返回所求距离。
# -*- coding:utf-8 -*-
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
'''
最高赞的python版
'''
class Tree:
ma = 0
macode = ''
mi = 9999
micode = ''
def getDis(self, root):
# write code here
if not root:
return 0
def getCode(root,code,codec):
if root:
codec += code
if root.left == None and root.right == None:
if root.val > self.ma:
self.ma = root.val
self.macode = codec
if root.val < self.mi:
self.mi = root.val
self.micode = codec
getCode(root.left,'0',codec)
#codec.pop()
getCode(root.right,'1',codec)
getCode(root,'-1','')
#print macode,micode
lma = len(self.macode)
lmi = len(self.micode)
#return lma
i = 0
while i < min(lma,lmi):
if self.macode[i] != self.micode[i]:
r = lma-i+lmi-i
return r
i += 1