繁体   English   中英

如何在二叉树中找到一个值

[英]How to find a value in a binary tree

我有一个如下图所示的二叉树,我想实现一个名为findNode的方法来返回保存作为参数输入的值的节点。 例如: findNode(8)=8findNode(13)=13 我试图修改这段代码,但没有奏效:

    class Node {
        Node left, right;
        int value;

        public Node findNode(int value) {
            Node focusNode = root;
            if (focusNode == null) {
                return null;
            }
            while (focusNode.value != value) {
                // If we should search to the left
                if (value < focusNode.value) {
                    // Shift the focus Node to the left child
                    focusNode = focusNode.left;
                } else {
                    // Shift the focus Node to the right child
                    focusNode = focusNode.right;
                }
                return focusNode;
            }
        }
    }

树示例

看看这是否有帮助。 您不能默认为左或右,但需要明确检查它们。 空情况由 while 循环处理。

    public Node findNode(int value) {
        Node focusNode = root;
        while (focusNode != null) {
            // If we should search to the left
            if (value < focusNode.value) {
                // Shift the focus Node to the left child
                focusNode = focusNode.left;
            } else if (value > focusNode.value) {
                // Shift the focus Node to the right child
                focusNode = focusNode.right;
            } else {
                // Found!!
                return focusNode;
            }
        }
        return null;
    }

这是一个更干净的方法:

   class Node {
        Node left, right;
        int value;

        public static Node findNode(Node current, int value) {
            if (current == null)
                return null;
            if (current.value == value)
                return current;
            if (current.value < value) 
                return findNode(current.left, value);
            else 
                return findNode(current.right, value);
        }
    }

你的根要么没有定义,要么每次都为空。 下面的代码将按预期工作。

class Node
{
    int value;
    Node left, right;

    public Node(int item)
    {
        value = item;
        left = right = null;
    }
}


public class BinaryTree {
    Node root;

    public Node findNode(int value) {
        Node focusNode = root;
        if (focusNode == null){
            return null;
        }

        while (focusNode.value!= value) {

            // If we should search to the left

            if (value< focusNode.value) {

                // Shift the focus Node to the left child

                focusNode = focusNode.left;

            } else {

// Shift the focus Node to the right child

                focusNode = focusNode.right;

            }


        }

        return focusNode;

    }

暂无
暂无

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

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