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

如何在java中从右到左遍历二叉树?

督阿苏
2023-03-14

我想从右到左遍历一个二叉树,并将每个具有相同姓氏的条目添加到一个队列中。我已经正确地实现了一个队列列表类和一个树节点类,但是当我试图查找一些东西时,我得到了一个空指针异常。(当然我写过二叉树的插入方法)。

public class ST {


    private TreeNode root;
    private int size;
    private Queue q;


    public Queue searchByLastName(String last_name) {
            searchByLastNameRec(this.root, last_name);
            return q;
        }

        private void searchByLastNameRec(TreeNode newroot, String last_name) {
            if (newroot == null)
                return;
            if (newroot.right != null) {
                if (newroot.right.item.getLast_name().equalsIgnoreCase(last_name)) {
                    q.put(newroot.right.item);
                }
                searchByLastNameRec(newroot.right, last_name);
            }
            if (newroot.left != null) {
                if (newroot.left.item.getLast_name().equalsIgnoreCase(last_name)) {
                    q.put(newroot.left.item);
                }
                searchByLastNameRec(newroot.left, last_name);
            }
        }


public class TreeNode {
    Suspect item;
    TreeNode left, right, parent;
    int N;

    public TreeNode(Suspect item) {
        if (item == null)
            throw new IllegalArgumentException();
        this.item = item;

    }

}

共有2个答案

宋伯寅
2023-03-14

我猜你的树中的一些项目是空的,或者有些有空的姓氏。由于您在构造节点时检查空项,因此我倾向于后者。

试试这个:

public TreeNode(Suspect item) {
    if (item == null)
        throw new IllegalArgumentException();
    if (item.getLast_name() == null)
        throw new IllegalArgumentException();
    this.item = item;
}
丌官淇
2023-03-14

试试这个

private void searchByLastNameRec(TreeNode newroot, String last_name) {
    if (newroot == null || newroot.item == null)
        return;
    if (Objects.equals(last_name, newroot.item.getLast_name()))
        q.put(newroot.item);
    searchByLastNameRec(newroot.right, last_name);
    searchByLastNameRec(newroot.left, last_name);
}
 类似资料:
  • 这是一个面试问题。 我们希望按it级别打印二叉树,但有一些变化: 在偶数级别,打印将从左到右。 在奇数级别,打印将从右到左。 我试着使用这里的代码(正常的级别顺序遍历,方法2)只做了一些保持级别的更改(用于知道是从左到右打印还是从右到左打印),当然还添加了相关的条件,以便在正确的方向上打印。 不幸的是,我下面的代码在不小的树上不能很好地工作--我有一个问题,就是理解如何在循环中以正确的顺序存储节点

  • 通常我们按顺序、前顺序或后顺序遍历二叉搜索树。但是,当我们按照从右到根到左的递归顺序遍历二叉搜索树时,会发生什么呢? 假设如果我将值存储在数组中,并且与前序遍历相比,当我们按此顺序遍历时,它的时间复杂度是否会增加。

  • 我在编码挑战中遇到了一个问题。 完整二叉树是一种二叉树,其中除叶节点外的每个节点都有两个子节点,且树的最后一级边高度有叶节点。 您的任务很简单,给定完整二叉树的遍历,请按顺序遍历打印其

  • 中序遍历二叉树 按完全二叉树的层次遍历给出一棵二叉树的遍历序列(其中用0表示虚结点),要求输出该二叉树的深度及中序遍历该二叉树得到的序列。 输入格式: 首先输入一个整数T,表示测试数据的组数,然后是T组测试数据。每组测试数据首先输入一个正整数n(n≤1000),代表给出的二叉树的结点总数(当然,其中可能包含虚结点)。结点编号均为正整数,且各不相同。 然后输入n个正整数,表示按完全二叉树(即第1层1

  • 假设我有一个简单的二叉树节点类,如下所示: 如何添加一个能够递归遍历任何大小的树的方法,从左到右访问每个现有节点,而无需重新访问已遍历的节点? 这行得通吗?