码迷,mamicode.com
首页 > 其他好文 > 详细

搜索一棵多叉树,指定的值target 是否在树里面

时间:2020-03-21 14:37:58      阅读:61      评论:0      收藏:0      [点我收藏+]

标签:sys   list()   imp   nod   details   添加节点   sdn   指定   null   

// 搜索一棵多叉树
// 结点的值 唯一,无序
// 输入: 树的根结点 root, 指定的值target
// 输出: 一个bool值,标志 指定的值target 是否在树里面

树节点的结构类
package com.hc.manager.test;

import java.util.ArrayList;
import java.util.List;

public class Node {
    private int key; //节点
    private String data; //节点数据
    public List childNodes = new ArrayList<Node>(); //多个子节点

    public Node(int key) {
        this.key = key;
    }

    public Node(int key ,String data) {
        this.key = key;
        this.data = data;
    }


    public int getKey() {
        return key;
    }

    public void setKey(int key) {
        this.key = key;
    }

    public String getData() {
        return data;
    }

    public void setData(String data) {
        this.data = data;
    }

    public List getChildNodes() {
        return childNodes;
    }

    public void setChildNodes(List childNodes) {
        this.childNodes = childNodes;
    }

}

树类

package com.hc.manager.test;

import java.util.List;
public class Tree {

    private Node root = new Node(0, "根");//树根
    private int key = 1; //节点数,为防止节点冲突,使用key++来添加节点数据
    private int index = 0;

    public Node getRoot() {
        return this.root;
    }

    public void add(int parentId, String vData) {
        this.add(parentId, vData, getRoot().childNodes);//如果没有设置上一个树节点的话,就使用根节点
    }


    public void add(int parentId, String vData, List<Node> childNodes) { //指定父节点查找指定树节点
        if (parentId == 0) {
            Node node = new Node(key++, vData);
            getRoot().childNodes.add(node);
        } else {
            if (childNodes == null) {
                return;
            }
            for (Node childNode : childNodes) {
                if (childNode.getKey() == parentId) {
                    Node node = new Node(key++, vData);
                    childNode.childNodes.add(node);
                    break;
                } else {
                    add(parentId, vData, childNode.childNodes);//该节点不匹配则找该节点下的子节点继续递归查找
                }
            }
        }
    }


    private boolean isExist ;

    public boolean isExistData(String vData, Node root) {
       isExist = false;
       return isExistData(vData , root.getChildNodes());
    }

    private boolean isExistData(String vData, List<Node> childNodes){
        if(childNodes == null){
            return isExist;
        }
        for(Node node :childNodes){
            if(node.getData() == vData){
                return true;
            }else{
                isExist = isExistData(vData, node.getChildNodes());
            }
        }
        return isExist;
    }


    //遍历方法的重载
    public void list() {
        this.list(this.getRoot().childNodes);
    }

    //循环Tree
    public  void list(List<Node> list) {
        index++;  //遍历次数,用于退出循环
        if (index == key) {//
            return;
        }
        for (Node item : list) {
            System.out.println(item.getKey() + "-->" + item.getData());
            if (item.childNodes.size() == 0) {
                continue;
            } else {
                list(item.childNodes);
            }
            System.out.println("\t");
        }
    }


    public static final void main(String[] args) {
        Tree tree = new Tree();
        tree.add(0, "1级树3");
        tree.add(2, "2级树1");
        tree.add(1, "2级树2");
        tree.add(1, "2级树3");
        tree.add(1, "2级树4");
        tree.add(2, "3级树2");
        tree.list();

        // 搜索一棵多叉树
        // 结点的值 唯一,无序
        // 输入: 树的根结点 root, 指定的值target
        // 输出: 一个bool值,标志 指定的值target 是否在树里面


        System.out.println(tree.isExistData("2级树1",tree.getRoot()));
        System.out.println(tree.isExistData("3级树2",tree.getRoot()));
        System.out.println(tree.isExistData("4级树2",tree.getRoot()));
    }


}

 

参考 https://blog.csdn.net/a1396537376/article/details/100186939

搜索一棵多叉树,指定的值target 是否在树里面

标签:sys   list()   imp   nod   details   添加节点   sdn   指定   null   

原文地址:https://www.cnblogs.com/hzd1096229481/p/12539136.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!