Java用孩子兄弟表示法表示树,求树的的深度

围巾🧣 2020年03月21日 282次浏览

问题

使用孩子兄弟表示法,求一棵树的深度。要定义树的节点,树,初始化树,泛型表示节点的数据类型

思路

求树的深度,就是对根节点求深度。转变为对普通节点求深度。

  1. 定义一个节点来当指针
  2. 判断
    1. 如果孩子都没有,就是0
      • 定义变量记录最高的,孩子的高度
      • 对每个孩子递归取最高那个
      1. 对节点递归
      2. 判断是否出现更高的
      • 循环结束,因为是孩子,所以是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;
        }
    }
}