问题
使用孩子兄弟表示法,求一棵树的深度。要定义树的节点,树,初始化树,泛型表示节点的数据类型
思路
求树的深度,就是对根节点求深度。转变为对普通节点求深度。
- 定义一个节点来当指针
- 判断
- 如果孩子都没有,就是0
-
- 定义变量记录最高的,孩子的高度
- 对每个孩子递归取最高那个
- 对节点递归
- 判断是否出现更高的
- 循环结束,因为是孩子,所以是1+max
代码
class MyTree<DataType> {
MyTreeNode<DataType> root;
public MyTree() {
root = new MyTreeNode<>(null, null, null);
}
public int getDepth() {
return getNodeDepth(root);
}
public int getNodeDepth(MyTreeNode<DataType> node) {
//1.定义一个节点来当指针
MyTreeNode<DataType> treeNode;
//2.如果孩子都没有,就是0
if (node.firstChild == null) {
return 0;
} else {
//1.定义变量记录最高的
int max = 0;
// 2.对每个孩子递归取最高那个
for (treeNode = node.firstChild; treeNode != null;
treeNode = treeNode.nextSibling) {
//对节点递归
int h = getNodeDepth(treeNode);
//判断是否出现更高的
max = (max < h) ? h : max;
}
//3.循环结束,因为是孩子,所以max要+1
return max + 1;
}
}
// 树节点
static class MyTreeNode<DataType> {
DataType element;
MyTreeNode<DataType> firstChild;
MyTreeNode<DataType> nextSibling;
public MyTreeNode(DataType element, MyTreeNode<DataType> firstChild, MyTreeNode<DataType> nextSibling) {
this.element = element;
this.firstChild = firstChild;
this.nextSibling = nextSibling;
}
}
}