最近开始找golang 开发工程师职位,针对算法相关二叉树相关常用面试题搞一遍:

package tree
import (
    "math"
    "fmt"
)
type BinaryTree struct {
    Value int
    Left  *BinaryTree
    Right *BinaryTree
}
func InitBinaryTree(root *BinaryTree) *BinaryTree {
    l := BinaryTree{}
    r := BinaryTree{}
    root.Left = l.NewBinaryTreeNode(2)
    root.Right = r.NewBinaryTreeNode(3)
    l2:=BinaryTree{}
    ll2:=BinaryTree{}
    root.Left.Left = l2.NewBinaryTreeNode(4)
    root.Left.Right = ll2.NewBinaryTreeNode(5)
    return root
}
func (this *BinaryTree) NewBinaryTreeNode(value int) *BinaryTree {
    this.Value = value
    this.Left = nil
    this.Right = nil
    return this
}
// 计算二叉树节点个数
func GetNodeNum(root *BinaryTree) int {
    if root == nil {
        return 0
    } else {
        return GetNodeNum(root.Left) + GetNodeNum(root.Right) + 1
    }
}
// 计算二叉树的深度
func GetDegree(root *BinaryTree) int {
    if root == nil {
        return 0
    }
    var maxDegree = 0
    if GetDegree(root.Left) > GetDegree(root.Right) {
        maxDegree = GetDegree(root.Left)
    } else {
        maxDegree = GetDegree(root.Right)
    }
    return maxDegree + 1
}
// 前序遍历: 根-> 左子树 -> 右子树
func PreOrder(root *BinaryTree) {
    if root == nil {
        return
    }
    fmt.Printf("%d->", root.Value)
    PreOrder(root.Left)
    PreOrder(root.Right)
}
// 中序: 左子树-> 根 -> 右子树
func InOrder(root *BinaryTree) {
    if root == nil {
        return
    }
    InOrder(root.Left)
    fmt.Printf("%d->", root.Value)
    InOrder(root.Right)
}
// 后序: 左子树-> 右子树 ->  根
func PostOrder(root *BinaryTree) {
    if root == nil {
        return
    }
    PostOrder(root.Left)
    PostOrder(root.Right)
    fmt.Printf("%d->", root.Value)
}
//  求 K 层节点个数
func GetKthNum(root *BinaryTree ,k int ) int {
    if root==nil{
        return 0 
    }
    if k==1{
        return 1 
    }
    return GetKthNum(root.Left,k-1)+GetKthNum(root.Right,k-1)
}
// 求叶子节点个数
func GetLeavNum(root *BinaryTree) int {
    if root==nil{
        return 0
    }
    if root.Left==nil && root.Right == nil {
        return 1
    }
    return GetLeavNum(root.Left)+GetLeavNum(root.Right)
}
// 判断是否平衡二叉树
func IsBalanced(root *BinaryTree) bool {
    if root==nil{
        return  true
    }
    lde:=GetDegree(root.Left)
    rde:=GetDegree(root.Right)
    flag:=false
    if (math.Abs(float64(lde-rde)))<=1{
        flag=true
    }else{
        flag=false
    }
    return flag && IsBalanced(root.Left) && IsBalanced(root.Right)
}

golang编写二叉树的更多相关文章

  1. Golang编写动态库实现回调函数

    Golang编写动态库实现回调函数 我们现在要做一个动态库,但是C++实在是比较难,于是就想能不能用更简单的golang来实现,golang也就是最近的版本才支持编译成动态库,在网上也没找到可用的案例 ...

  2. 使用golang 编写postgresql 扩展

      postgresql 的扩展可以帮助我们做好多强大的事情,支持的开发语言有lua.perl.java.js.c 社区有人开发了一个可以基于golang开发pg 扩展的项目,使用起来很方便,同时为我 ...

  3. 使用 Golang 编写链代码 (v0.6 )

    https://www.ibm.com/developerworks/cn/cloud/library/cl-ibm-blockchain-chaincode-testing-using-golang ...

  4. Golang 编写 Tcp 服务器

    Golang 作为广泛用于服务端和云计算领域的编程语言,tcp socket 是其中至关重要的功能.无论是 WEB 服务器还是各类中间件都离不开 tcp socket 的支持. Echo 服务器 拆包 ...

  5. Golang编写Windows动态链接库(DLL)及C调用范例

    一.准备. 1.GoLang在1.10版本之后开始支持编译windows动态链接库,可以打开命令行工具使用go version 查看自己的go版本. 2.你的电脑上需要gcc,如果没有的话[点击这里] ...

  6. Golang 编写的图片压缩程序,质量、尺寸压缩,批量、单张压缩

    目录: 前序 效果图 简介 全部代码 前序: 接触 golang 不久,一直是边学边做,边总结,深深感到这门语言的魅力,等下要跟大家分享是最近项目 服务端 用到的图片压缩程序,我单独分离了出来,做成了 ...

  7. java编写二叉树以及前序遍历、中序遍历和后序遍历 .

    /** * 实现二叉树的创建.前序遍历.中序遍历和后序遍历 **/ package DataStructure; /** * Copyright 2014 by Ruiqin Sun * All ri ...

  8. 使用Golang编写优化算法 (1)

    动手写点东西是学习新知识很重要的一个阶段.之前用 Python 和 JavaScript 实现优化算法,现在用 Golang 来实现.语法上略有不爽,某些C语言的思维又回来了. - Golang 用 ...

  9. 使用golang编写prometheus metrics exporter

    metrcis输出 collector.go package main import ( "github.com/prometheus/client_golang/prometheus&qu ...

随机推荐

  1. 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_6-1.常用的第三方支付和聚合支付介绍

    笔记 第六章 开发在线教育视频站点核心业务之从零基础接入 微信扫一扫网页支付 1.常用的第三方支付和聚合支付介绍     简介:介绍常用的第三方支付和聚合支付 1.什么是第三方支付         第 ...

  2. python3.7与pyspider的坑

    网络上安装pyspider的坑有很多,但都不如我今天的大,困扰了我几天,终于解决了 Traceback (most recent call last): File "/ffk_learn/s ...

  3. MySQL数据库同步工具的设计与实现

    一.背景 在测试过程中,对于不同的测试团队,出于不同的测试目的,我们可能会有多套测试环境.在产品版本迭代过程中,根据业务需求,会对数据库的结构进行一些修改,如:新增表.字段.索引,修改表.字段索引等操 ...

  4. TCP/IP 和 和 DoD 模型

    TCP/IP 模型也被称作 DoD 模型(Department of Defense Model).TCP/IP 字面上代表了两个协议:TCP(传输控制协议)和 IP(网络之间互联协议).TCP/IP ...

  5. kettle mogodb output详解

    以下主要来自官网文档,原文:https://wiki.pentaho.com/display/EAI/MongoDB+Output Configure Connection Tab 1 Host na ...

  6. 包含min函数的栈、队列

    题目:定义栈的数据结构,请在该类型中实现一个能够得到栈/队列的最小元素的min函数.在该栈/队列中,调用min.入栈(入队列)及出栈(出队列)函数的时间复杂度都是O(1). 1. 包含min函数的栈 ...

  7. CWinThread类,使用后要不要使用CloseHandle释放内核

    在VC++中用AfxBeginThread()开启线程的时候,返回的是CWinThead类的指针.但是使用后是否应该用CloseHandle释放内核资源呢? 在<Windows核心编程>中 ...

  8. Altera DDR2控制器学习笔记

    Altera DDR2控制器使用IP的方式实现,一般很少自己写控制器代码. ddr22 ddr22_inst ( .aux_full_rate_clk (mem_aux_full_rate_clk), ...

  9. 【miscellaneous】海康相机RTSP连接代码分析

    海康相机RTSP连接代码分析 最近在做海康相机rtsp连接获取音视频的工作,现在介绍一下分析过程和源码. [源码在我上传的共享资料中: http://download.csdn.net/detail/ ...

  10. python录音并调用百度语音识别接口

    #!/usr/bin/env python import requests import json import base64 import pyaudio import wave import os ...