data-structures - 非二叉树高度

标签 data-structures tree

有没有办法找到不一定是二叉树的高度?有许多计算二叉树高度的算法,但没有一种算法适用于非二叉树。

最佳答案

是的,有。递归方法可能类似于:

public class TreeNode<T>{
    private List<TreeNode<T>> children = new ArrayList<TreeNode<T>>();
    private T data = null;

    public TreeNode(T data){
        this.data = data;
    }       

    public List<TreeNode<T>> getChildren(){
        return children;
    }   

    public void setChild(TreeNode<T> children){
        this.children.add(children);
    }   

    public Integer getHeight(TreeNode<T> root){
        if(root == null) return 0;
        Integer h=0;

        for(TreeNode<T> n : root.getChildren()){
            h = Math.max(h, getHeight(n));
        }
        return h+1;
    }
}

测试:

public static void main(String[] args){
    TreeNode<Integer> root = new TreeNode<Integer>(50);
    TreeNode<Integer> c1 = new TreeNode<Integer>(100);
    TreeNode<Integer> c2= new TreeNode<Integer>(10);
    TreeNode<Integer> c3 = new TreeNode<Integer>(-5);
    TreeNode<Integer> c4 = new TreeNode<Integer>(0);
    TreeNode<Integer> c5 = new TreeNode<Integer>(33);
    TreeNode<Integer> c6 = new TreeNode<Integer>(1);
    TreeNode<Integer> c7 = new TreeNode<Integer>(2);
    TreeNode<Integer> c8 = new TreeNode<Integer>(3);
    TreeNode<Integer> c9 = new TreeNode<Integer>(300);
    TreeNode<Integer> c10 = new TreeNode<Integer>(350);

    root.setChild(c1);
    root.setChild(c2);
    c2.setChild(c3);
    c3.setChild(c4);
    c3.setChild(c5);
    c3.setChild(c6);
    c3.setChild(c7);
    c3.setChild(c8);

    c1.setChild(c9);
    c1.setChild(c10);

    System.out.print("Pre order: \n");
    root.dfs(root, 0);
    System.out.print("\nPost order: \n");
    root.dfs(root, 1);
    System.out.print("\nBFS: \n");
    root.bfs(root);
    System.out.println();
    System.out.print("\nHeigth: \n");
    System.out.println(root.getHeight(root));
}

结果:

Heigth: 
4

编辑:返回 4,而不是前面所述的 3

关于data-structures - 非二叉树高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13476508/

相关文章:

java - 从链表中删除相同的元素

java - 用于读/写 IPv6 地址范围以实现快速查找的高效数据结构是什么?

java - 使用 avro 序列化将整个 Json 发送到 kafka?

c - 如何在不使用递归和层序遍历的情况下求二叉树的高度?

java - 垃圾收集器是否会收集不再可访问但仍指向树的树叶

捕获从 int 到 long 的隐式类型转换,反之亦然

Java通用树遍历与节点过滤

java - InOrder 遍历进入无限循环并仅打印第一个节点

c - 如何使用递归函数只打印树的 5 个节点

data-structures - 完整的二叉树作为有效的数据结构