java计算二叉树的节点最小值_二叉树算法大全(java版)

这篇博客介绍了如何使用Java计算二叉树的节点最小值,包括遍历二叉树、求树的高度、查找节点所在的层次、计算节点总数、叶子节点数量、父节点数量以及只有一子节点的父节点数量。提供了详细的算法实现和相关方法。
摘要由CSDN通过智能技术生成

data != null) {

System.out.print(elements[front].data + " ");

if (elements[front].leftTree != null)

elements[rear++] = elements[front].leftTree;

if (elements[front].rightTree != null)

elements[rear++] = elements[front].rightTree;

front++;

}

} catch (Exception e) {

break;

}

}

}

// 求二叉树的高度

public static int height(BiTree tree) {

if (tree == null)

return 0;

else {

int leftTreeHeight = height(tree.leftTree);

int rightTreeHeight = height(tree.rightTree);

return leftTreeHeight &gt rightTreeHeight ? leftTreeHeight + 1

: rightTreeHeight + 1;

}

}

// 求data所对应结点的层数,如果对象不在树中,结果返回-1;否则结果返回该对象在树中所处的层次,规定根节点为第一层

public int level(Object data) {

int leftLevel, rightLevel;

if (this == null)

return -1;

if (data == this.data)

return 1;

leftLevel = leftTree == null ? -1 : leftTree.level(data);

rightLevel = rightTree == null ? -1 : rightTree.level(data);

if (leftLevel &lt 0 && rightLevel &lt 0)

return -1;

return leftLevel &gt rightLevel ? leftLevel + 1 : rightLevel + 1;

}

// 求二叉树的结点总数

public static int nodes(BiTree tree) {

if (tree == null)

return 0;

else {

int left = nodes(tree.leftTree);

int right = nodes(tree.rightTree);

return left + right + 1;

}

}

// 求二叉树叶子节点的总数

public static int leaf(BiTree tree) {

if (tree == null)

return 0;

else {

int left = leaf(tree.leftTree);

int right = leaf(tree.rightTree);

if (tree.leftTree == null && tree.rightTree == null)

return left + right + 1;

else

return left + right;

}

}

// 求二叉树父节点个数

public static int fatherNodes(BiTree tree) {

if (tree == null || (tree.leftTree == null && tree.rightTree == null))

return 0;

else {

int left = fatherNodes(tree.leftTree);

int right = fatherNodes(tree.rightTree);

return left + right + 1;

}

}

// 求只有一个孩子结点的父节点个数

public static int oneChildFather(BiTree tree) {

int left, right;

if (tree == null || (tree.rightTree == null && tree.leftTree == null))

return 0;

else {

left = oneChildFather(tree.leftTree);

right = oneChildFather(tree.rightTree);

if ((tree.leftTree != null && tree.rightTree == null)

|| (tree.leftTree == null && tree.rightTree != null))

return left + right + 1;

else

return left + right;/* 加1是因为要算上根节点 */

}

}

// 求二叉树只拥有左孩子的父节点总数

public static int leftChildFather(BiTree tree) {

if (tree == null)

return 0;

else {

int left = leftChildFather(tree.leftTree);

int right = leftChildFather(tree.rightTree);

if ((tree.leftTree != null && tree.rightTree == null))

return left + right + 1;

else

return left + right;

}

}

// 求二叉树

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值