当前位置: 首页 > 知识库问答 >
问题:

java中二叉搜索树的层次顺序遍历

田佐
2023-03-14

我已经为我的二叉搜索树做了4次不同的遍历。我被困在最后一个,这是水平顺序遍历,我不能得到,似乎找到如何做它正确。

主要的问题是我不知道如何一次只搜索一个层次,我只知道如何搜索整个左或整个右子树。

private void preOrder(BinaryNode<AnyType> t )
    {
        if(isEmpty()){
            System.out.println("Empty");
        }
        if(t != null) {
            System.out.println(t.element);
            preOrder(t.left);
            preOrder(t.right);
        }
    }

    private void postOrder(BinaryNode<AnyType> t){

        if(isEmpty()){
            System.out.println("Empty");
        }
        if (t != null) {
            postOrder(t.left);
            postOrder(t.right);
            System.out.println(t.element);
        }
    }

    private void inOrder(BinaryNode<AnyType> t)
    {
        if(isEmpty()){
            System.out.println("Empty");
        }

        if (t != null) {
            inOrder(t.left);
            System.out.println(t.element);
            inOrder(t.right);
        }
    }

    private void levelOrder(BinaryNode<AnyType> t, int level)
    {
        if(isEmpty()){
            System.out.println("Empty");
        }

        if(height(t) == 2) {
            System.out.println(t.element);

        }else if(height(t) > 1){
            levelOrder(t.left, level );
            levelOrder(t.right, level );
        }

    }

共有1个答案

罗伟志
2023-03-14

我就是这么做的。

private void levelOrder(BinaryNode root) {
        if (root == null) {
            return;
        }

        Queue<BinaryNode> q = new LinkedList<>();

        // Pushing root node into the queue.
        q.add(root);

        // Executing loop till queue becomes
        // empty
        while (!q.isEmpty()) {

            BinaryNode curr = q.poll();
            System.out.print(curr.element + " ");

            // Pushing left child current node
                if (curr.left != null) {
                    q.add(curr.left);
                }

                // Pushing right child current node
                if (curr.right != null) {
                    q.add(curr.right);
                }
            }
    }
 类似资料:
  • 我想对二叉树执行级别顺序遍历。因此,对于给定的树,说: 产出将是: 我知道我可以使用某种队列,但在C中递归地实现这一点的算法是什么?感谢您的帮助。

  • //执行顺序遍历的递归方法

  • 我们有一个任务需要编码: > 二叉搜索树 树必须是完整的,而不是完美的(这意味着不在最底层或次底层的所有节点都应该有两个子节点,而最底层的节点应该尽可能靠左) 我们需要按级别顺序插入树 因此,如果我有一个包含元素的数组,应该是,左边是,右边是。 插入的级别顺序为: 只是取数组的中间并将其作为root是行不通的。如果您得到一个由1到9个元素组成的数组,那么您将有4个元素作为根(java中的int值,

  • 主要内容:层次遍历的实现过程,实现代码前边介绍了 二叉树的先序、中序和后序的遍历算法,运用了 栈的 数据结构,主要思想就是按照先左子树后右子树的顺序依次遍历树中各个结点。 本节介绍另外一种遍历方式:按照二叉树中的层次从左到右依次遍历每层中的结点。具体的实现思路是:通过使用 队列的数据结构,从树的根结点开始,依次将其左孩子和右孩子入队。而后每次队列中一个结点出队,都将其左孩子和右孩子入队,直到树中所有结点都出队,出队结点的先后顺序就是层

  • 主要内容:src/runoob/binary/LevelTraverse.java 文件代码:二分搜索树的层序遍历,即逐层进行遍历,即将每层的节点存在队列当中,然后进行出队(取出节点)和入队(存入下一层的节点)的操作,以此达到遍历的目的。 通过引入一个队列来支撑层序遍历: 如果根节点为空,无可遍历; 如果根节点不为空: 先将根节点入队; 只要队列不为空: 出队队首节点,并遍历; 如果队首节点有左孩子,将左孩子入队; 如果队首节点有右孩子,将右孩子入队; 下面依次演示如下步骤: (1)先取出

  • 编写一个函数,如果给定的二叉搜索树包含给定的值,则返回1,否则返回0。 例如,对于以下树: N1(值:1,左:null,右:null) n2(值:2,左:n1,右:n3) N3(值:3,左:null,右:null) 对contains(&n2,3)的调用应返回1,因为根位于n2的树包含编号3。 函数应该返回1,然而,它返回0或者根本不返回。