微软100题第11题(求二叉树中节点的最大距离)

38 篇文章 0 订阅
22 篇文章 0 订阅

发布一个k8s部署视频:https://edu.csdn.net/course/detail/26967

课程内容:各种k8s部署方式。包括minikube部署,kubeadm部署,kubeasz部署,rancher部署,k3s部署。包括开发测试环境部署k8s,和生产环境部署k8s。

腾讯课堂连接地址https://ke.qq.com/course/478827?taid=4373109931462251&tuin=ba64518

第二个视频发布  https://edu.csdn.net/course/detail/27109

腾讯课堂连接地址https://ke.qq.com/course/484107?tuin=ba64518

介绍主要的k8s资源的使用配置和命令。包括configmap,pod,service,replicaset,namespace,deployment,daemonset,ingress,pv,pvc,sc,role,rolebinding,clusterrole,clusterrolebinding,secret,serviceaccount,statefulset,job,cronjob,podDisruptionbudget,podSecurityPolicy,networkPolicy,resourceQuota,limitrange,endpoint,event,conponentstatus,node,apiservice,controllerRevision等。

第三个视频发布:https://edu.csdn.net/course/detail/27574

详细介绍helm命令,学习helm chart语法,编写helm chart。深入分析各项目源码,学习编写helm插件


————————————————------------------------------------------------------------------------------------------------------------------

1scala版本

package ms

import scala.util.Random
/**
 * 第11题(树)
求二叉树中节点的最大距离...
如果我们把二叉树看成一个图,父子节点之间的连线看成是双向的,
我们姑且定义"距离"为两节点之间边的个数。
写一个程序,
求一棵二叉树中相距最远的两个节点之间的距离。
 * 
 */
class RandomBinaryTree{
  var root:RandomNode=null;
  def init(data:List[Int]){
    if(data.length>0){
      root=RandomNode(data(0))
      if(data.length>1){
        for(i<-1 until data.length){
          insertRandomNode(root,data(i))
        }
      }
    }
  }
  
  private[this] def insertRandomNode(parent:RandomNode,value:Int){
    var  b:Boolean= Random.nextBoolean();
    if(b){
      if(parent.left==null){
        parent.left=RandomNode(value)
      }else{
        insertRandomNode(parent.left, value)
      }
    }else{
      if(parent.right==null){
        parent.right=RandomNode(value)
      }else{
        insertRandomNode(parent.right, value)
      }
    }
  }
  
  def computeMaxDepth(parent:RandomNode):Unit={
     if(parent.left==null){
       parent.leftDepth=0;
     }
     if(parent.right==null){
       parent.rightDepth=0;
     }
     if(parent.left!=null){
       computeMaxDepth(parent.left)
       parent.leftDepth=math.max(parent.left.leftDepth,parent.left.rightDepth)+1
     }
     if(parent.right!=null){
       computeMaxDepth(parent.right)
       parent.rightDepth=math.max(parent.right.leftDepth, parent.right.rightDepth)+1
     }
     
  }
  
  def computeMaxLongDepth(parent:RandomNode):Int={
    if(parent==null){
      return 0
    }
    val maxLongDepth=parent.leftDepth+parent.rightDepth;
    val leftmax=computeMaxLongDepth(parent.left)
    val rightmax=computeMaxLongDepth(parent.right)
    return math.max(maxLongDepth, math.max(leftmax, rightmax))
  }
}

case class RandomNode(var value:Int,var left:RandomNode=null,var right:RandomNode=null,var leftDepth:Int= -1,var rightDepth:Int= -1 )

object MicroSoft011 {
  def main(args: Array[String]): Unit = {
    val data=List(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1)
    val tree=new RandomBinaryTree();
    tree.init(data)
    tree.computeMaxDepth(tree.root)
    println(tree.computeMaxLongDepth(tree.root));
    println()
  }
  
}

2java版

 

3python版

'''
Created on 2017-1-18

@author: admin
/** 
 * 第11题(树) 
求二叉树中节点的最大距离... 
如果我们把二叉树看成一个图,父子节点之间的连线看成是双向的, 
我们姑且定义"距离"为两节点之间边的个数。 
写一个程序, 
求一棵二叉树中相距最远的两个节点之间的距离。 
 *  
 */  
'''
from _overlapped import NULL
import sys
import random

class RandomBinaryTree:
    def __init__(self,data):
        if len(data)>0:
            self.root=RandomNode(data[0])
            if len(data)>1:
                for i in range(1,len(data)):
                    self._insertNode(self.root,data[i])
    def _insertNode(self,parent,value):
        direction=random.choice([True,False])
        if direction:
            if parent.left==NULL:
                parent.left=RandomNode(value)
            else:
                self._insertNode(parent.left, value)
        else:
            if parent.right==NULL:
                parent.right=RandomNode(value)
            else:
                self._insertNode(parent.right, value)
    def computeDepth(self,parent):
        if parent.left==NULL:
            parent.leftDepth=0
        if parent.right==NULL:
            parent.rightDepth=0
        if parent.left!=NULL:
            self.computeDepth(parent.left)
            parent.leftDepth=max([parent.left.rightDepth,parent.left.leftDepth])+1
        if parent.right!=NULL:
            self.computeDepth(parent.right)
            parent.rightDepth=max([parent.right.rightDepth,parent.right.leftDepth])+1
    def computeMaxDepth(self,parent):
        if parent==NULL:
            return 0
        depth=parent.leftDepth+parent.rightDepth+1
        leftmax=self.computeMaxDepth(parent.left)  
        rightmax=self.computeMaxDepth(parent.right)
        return max([depth,leftmax,rightmax])
class RandomNode:
    def __init__(self,value):
        self.value=value
        self.left=NULL
        self.right=NULL
        self.leftDepth=-sys.maxsize
        self.rightDepth=-sys.maxsize
        
if __name__ == '__main__':
    data=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]
    tree=RandomBinaryTree(data)
    tree.computeDepth(tree.root)
    print(tree.computeMaxDepth(tree.root))

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hxpjava1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值