繁体   English   中英

父节点的二叉搜索树级别顺序

[英]Binary search tree level order with parent node

嗨,我正在尝试以(node element, parent node element)格式打印二进制搜索树的级别顺序。 我当前正在使用队列来获取级别顺序,但是我很难获取父节点。 可以处理队列吗? 如果是这样,我将如何去做? 如果不是,哪种最佳方法呢? 谢谢!

例如,下面的树:

         6
       /   \
      5     7

级别0:(6,空)

等级1:(5,6)(7,6)

因此,不幸的是,假设您的节点仅具有left,right和value,没有一种方法可以严格地对一个队列执行此操作。 问题是一旦深度> 0,该级别的节点可能具有不同的父级,除非您以某种方式存储它,否则该信息将消失。

简单的方法是在Node类中添加一个Node父级。 除非如此,否则您还可以创建一个内部类来保存Node到父节点的映射,或者可以使用任意数量的数据结构。 下面,我介绍了如何使用哈希图执行此操作。

public void printLevelOrder(){
    Queue<Node> q = new LinkedList<Node>();
    Map<Node, Node> parents = new HashMap<Node,Node>();
    Node nextLevel = null;
    q.add(this);
    int lvl = 0;

    while (!q.isEmpty()){
        Node n = q.remove();
        if (n == nextLevel || nextLevel == null){
            System.out.print("\nlvl " + lvl++ +" ");
            nextLevel = null;
        }
        System.out.print("("+n.value +","+parents.remove(n)+")");
        if (n.left != null){
            q.add(n.left);
            parents.put(n.left, n);
            if (nextLevel == null)
                nextLevel = n.left;
        }
        if (n.right != null){
            q.add(n.right);
            parents.put(n.right, n);
            if (nextLevel == null)
                nextLevel = n.right;
        }
    }
}

要按级别打印节点,请执行以下操作。 通过添加第一个非空的nextLevel节点来确定下一个级别。 当我们到达那个节点时,我们知道我们处于下一行的开始,然后再次将其清空。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM