最小高度树算法java_算法:计算二叉树的高度

这篇博客介绍了如何使用Java和Golang计算二叉树的高度。Java实现中,通过`TreeHeight`类的`height`方法递归计算节点高度;Golang实现则通过`AVLNode`结构体的方法`Height`来获取树的高度。两种实现都考虑了空节点的情况并使用了最大值来确定树的高度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java 实现

public class TreeHeight {

public static void main(String[] args) {

TreeHeight tree = new TreeHeight();

Node node1 = new Node(3);

Node node2 = new Node(9);

Node node3 = new Node(20);

Node node4 = new Node(15);

Node node5 = new Node(7);

/*tree.add(node1);

tree.add(node2);

tree.add(node3);

tree.add(node4);

tree.add(node5);*/

// System.out.println(tree.root.id);

// System.out.println(tree.height(tree.root));

tree.root = node1;

node1.left = node2;

node1.right = node3;

node3.left = node4;

node3.right = node5;

System.out.println(tree.height(tree.root));

}

public Node root;

public int height(Node node) {

if (node == null) {

return 0;

}

int leftHeight = height(node.left);

int rightHeight = height(node.right);

return Math.max(leftHeight, rightHeight) + 1;

}

public void add(Node node) {

root = add(root, node);

}

private Node add(Node root, Node node) {

if (root == null) {

return node;

}

if (root.id > node.id) {

root.left = add(root.left, node);

} else {

root.right = add(root.right, node);

}

return root;

}

private static class Node {

public int id;

public Node left;

public Node right;

public Node(int id) {

this.id = id;

}

}

}

Golang 实现

定义树和节点

type AVLTree struct {

root *AVLNode

}

type AVLNode struct {

id int

left *AVLNode

right *AVLNode

}

当前节点的高度

递归结算,并注意自身节点高度为1,递归一次累加1。

// Height 以当前节点为根节点的树的高度

func (node *AVLNode) Height() int {

var leftHeight int

if node.left == nil {

leftHeight = 0

} else {

leftHeight = node.left.Height()

}

var rightHeight int

if node.right == nil {

rightHeight = 0

} else {

rightHeight = node.right.Height()

}

if leftHeight > rightHeight {

return leftHeight + 1

} else {

return rightHeight + 1

}

}

当前节点左子树的高度

func (node *AVLNode) leftHeight() int {

if node.left == nil {

return 0

}

return node.left.Height()

}

当前节点右子树的高度

func (node *AVLNode) rightHeight() int {

if node.right == nil {

return 0

}

return node.right.Height()

}

树的高度

func (tree *AVLTree) Height() int {

return tree.root.Height()

}

树的左子树高度

func (tree *AVLTree) leftHeight() int {

if tree.root.left == nil {

return 0

}

return tree.root.leftHeight()

}

树的右子树高度

func (tree *AVLTree) rightHeight() int {

if tree.root.right == nil {

return 0

}

return tree.root.rightHeight()

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值