首页 > 其他 > 详细

golang编写二叉树

时间:2019-10-06 23:53:34      阅读:144      评论:0      收藏:0      [点我收藏+]

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

 

package tree

import (
	"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)
	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)
}

  

golang编写二叉树

原文:https://www.cnblogs.com/shaoyu19900421/p/11628967.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!