精华内容
下载资源
问答
  • 树的结构

    2018-04-24 18:21:25
    (ps:我们约定空树不是任意一个树的结构)题目分析:子结构,子结构,子结构。不是子树!(图片来源:牛客网txlstars)这也是满足题意的!/* struct TreeNode { int val; struct TreeNode *left; struct ...

    题目描述:

    输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)

    题目分析:

    子结构,子结构,子结构。不是子树!


    (图片来源:牛客网txlstars)

    这也是满足题意的!

    /*
    struct TreeNode {
    	int val;
    	struct TreeNode *left;
    	struct TreeNode *right;
    	TreeNode(int x) :
    			val(x), left(NULL), right(NULL) {
    	}
    };*/
    class Solution {
    public:
        bool isSubtree(TreeNode* pRoot1, TreeNode* pRoot2){
            if(!pRoot2) return true;
            if(!pRoot1) return false;
            if(pRoot1->val != pRoot2->val) return false;
            return isSubtree(pRoot1->left, pRoot2->left) && isSubtree(pRoot1->right, pRoot2->right);
        }
        bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2)
        {
            if(!pRoot1 || !pRoot2) return false;
            return isSubtree(pRoot1, pRoot2) || HasSubtree(pRoot1->left, pRoot2) || HasSubtree(pRoot1->right, pRoot2);
        }
    };
    ps:若将子结构改为子树,只需将isSubtree函数改为isEqual即可
    展开全文
  • 本文介绍了ReactJs实现结构的数据显示组件示例,分享给大家,具体如下: 1、该组件形显示数据 2、组件中数据请求方式为fetch方式 3、点击对应数据前面小三角,fetch请求改数据下对应子数据,并...
  • 树结构

    2021-04-13 19:56:30
    0)个互不交的有限集合,其中每个集合又是一棵树,称为原来树的“子树(SubTree)” [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-P50MJTL0-1618314971670)...

    树(tree)是n(n >= 0)个节点构成的有限集合。当n = 0时,称为空树
    对于任意一颗非空树,具有以下性质

    • 有一个称为“根(Root)”的特殊节点,用r表示
    • 其余节点可分为m(m > 0)个互不交的有限集合,其中每个集合又是一棵树,称为原来树的“子树(SubTree)”

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-P50MJTL0-1618314971670)(https://gitee.com/jq96m/imgbed/raw/master/img/%E6%A0%91.svg)]


    二叉树

    树中每个节点最多只能有两个子节点,这样的树称为“二叉树”。几乎所有的树都可以表示成二叉树形式
    二叉树中有几个比较重要的特特性

    • 二叉树第i层的最大节点数为:2i-1 (i>=1)
    • 深度为k的二叉树最大节点数为:2k-1 (k>=1)
    • 对于非空二叉树,若n0表示叶节点个数,n2表示度为2的非叶节点个数,那么两者满足关系n0 = n2+1

    二叉搜索树

    • 非空左子树的所有键值小于其根节点的键值
    • 非空右子树的所有键值大于其根节点的键值
    • 左右子树本身也都是二叉搜索树

    二叉搜索树的封装

    class Node {
      constructor(key) {
        this.key = key
        this.left = null
        this.right = null
      }
    }
    
    class BinarySearchTree {
      constructor() {
        this.root = null
      }
      // 插入一个新的键
      insert(key) {
        const node = new Node(key)
        if (this.root === null) {
          this.root = node
        } else {
          recursion(this.root, node)
        }
        function recursion(node, newNode) {
          if (newNode.key < node.key) {
            if (node.left === null) {
              node.left = newNode
            } else {
              recursion(node.left, newNode)
            }
          } else {
            if (node.right === null) {
              node.right = newNode
            } else {
              recursion(node.right, newNode)
            }
          }
        }
      }
      // 先序遍历所有节点
      prevOrderTraversal(handler) {
        recursion(this.root, handler)
        function recursion(node, handler) {
          if (node != null) {
            handler(node.key)
            recursion(node.left, handler)
            recursion(node.right, handler)
          }
        }
      }
      // 中序遍历所有节点
      middleOrderTraversal(handler) {
        recursion(this.root, handler)
        function recursion(node, handler) {
          if (node != null) {
            recursion(node.left, handler)
            handler(node.key)
            recursion(node.right, handler)
          }
        }
      }
      // 后续遍历所有节点
      postOrderTraversal(handler) {
        recursion(this.root, handler)
        function recursion(node, handler) {
          if (node != null) {
            recursion(node.left, handler)
            recursion(node.right, handler)
            handler(node.key)
          }
        }
      }
      // 返回最小值/键
      min() {
        let current = this.root
        while (current.left) {
          current = current.left
        }
        return current.key
      }
      // 返回最大值/键
      max() {
        let current = this.root
        while (current.right) {
          current = current.right
        }
        return current.key
      }
      // 在树中查找键,返回true或false
      search(key) {
        let current = this.root
        while (current) {
          if (key < current.key) {
            current = current.left
          } else if (key > current.right) {
            current = current.right
          } else {
            return true
          }
        }
        return false
      }
      // 移除某个键
      remove(key) {
        let parent = null
        let current = this.root
        let isLeft = true
        while (current.key !== key) {
          parent = current
          if (key < current.key) {
            current = current.left
          } else {
            isLeft = false
            current = current.right
          }
          if (current === null) return false
        }
        // 1. 删除的节点是叶子节点
        if (current.left === null && current.right === null) {
          if (current === this.root) {
            this.root = null
          } else if (isLeft) {
            parent.left = null
          } else {
            parent.right = null
          }
        }
        // 2. 删除的节点有一个子节点
        else if (current.right === null) {
          if (current === this.root) {
            this.root = current.left
          } else if (isLeft) {
            parent.left = current.left
          } else {
            parent.right = current.left
          }
        } else if (current.left === null) {
          if (current === this.root) {
            this.root = current.right
          } else if (isLeft) {
            parent.left = current.right
          } else {
            parent.right = current.right
          }
        }
        // 3. 删除的节点有两个子节点
        else {
          let successer = this.getSuccessor(current)
          if (this.root === current) {
            this.root = successer
          } else if (isLeft) {
            parent.left = successer
          } else {
            parent.right = successer
          }
          successer.left = current.left
        }
        return true
      }
      // 获取后继(即右树中的最小值),若使用前驱就是 左数中的最大值
      getSuccessor(delNode) {
        let successerParent = delNode
        let successer = delNode
        let current = delNode.right
        while (current) {
          successerParent = successer
          successer = current
          current = current.left
        }
        // 若后继节点不是删除节点的右节点
        if (successer !== delNode.right) {
          successerParent.left = successer.right
          successer.right = delNode.right
        }
        return successer
      }
    }
    

    红黑树

    红黑树除二叉树的规则外还有以下特点

    1. 节点是黑色或红色
    2. 根节点是黑色
    3. 叶子节点是黑色的空节点(NIL节点)
    4. 红色节点的子节点都是黑色(从根节点到叶子节点的路径中不会出现两个连续的红色节点)
    5. 从任意节点到其每个叶子的所有路径都包含相同数目的黑色节点

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RLNiH04m-1618314971674)(https://gitee.com/jq96m/imgbed/raw/master/img/%E7%BA%A2%E9%BB%91%E6%A0%91.svg)]

    有了上面性值的约束,可以保证:最长路径不超过最短路径的两倍

    红黑树的旋转

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v9RGHUax-1618314971677)(https://gitee.com/jq96m/imgbed/raw/master/img/%E7%BA%A2%E9%BB%91%E6%A0%91%E6%97%8B%E8%BD%AC.svg)]### 插入操作
    设插入的节点为N,其父节点为P,祖父节点为G,父节点的兄弟节点为U。有以下五种情况

    情况一

    新节点N位于树根上,没有父节点
    这样直接将颜色变为黑色即可

    情况二

    新节点的父节点P是黑色
    不需要变化

    情况三

    P为红色,U也为红色
    将其PUG变为另一种颜色[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FemZkc5D-1618314971680)(https://gitee.com/jq96m/imgbed/raw/master/img/%E7%BA%A2%E9%BB%91%E6%A0%91%E6%8F%92%E5%85%A53.svg)]
    若其祖父节点的父节点为红色,这样便违反了红黑树性值。可以使用递归调整颜色

    情况四

    P红、U黑、G黑,N是左儿子
    G变为红色、P变为黑色,然后右旋转[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lK5zEfTv-1618314971682)(https://gitee.com/jq96m/imgbed/raw/master/img/%E7%BA%A2%E9%BB%91%E6%A0%91%E6%8F%92%E5%85%A54.svg)]

    情况五

    P红、U黑、G黑,N是右儿子
    P为根进行左旋转 → 以祖父为根进行右旋转,并改变颜色[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-K1uQNWOL-1618314971684)(https://gitee.com/jq96m/imgbed/raw/master/img/%E7%BA%A2%E9%BB%91%E6%A0%91%E6%8F%92%E5%85%A55.svg)]

    展开全文
  • 网页 资讯 视频 图片 知道 文库 贴吧 采购 地图 | 百度首页 ...百度文库 教育专区 高等教育 工学 数据结构课程设计实验 数据结构课程设计实验 树的遍历文件目录结构的显示 树的遍历文件目录结构的显示 实验报告 实验报
  • 只有前端的页面和JS没有后台,数据库表的结构看图,页面使用了layer和ztree自行拷贝官方的js和css文件 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <...

    只有前端的页面和JS没有后台,数据库表的结构看图,页面使用了layer和ztree自行拷贝官方的js和css文件

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <script type="text/javascript">
    		$(function() {
    			$(".list-group-item").click(function() {
    				if ($(this).find("ul")) {
    					$(this).toggleClass("tree-closed");
    					if ($(this).hasClass("tree-closed")) {
    						$("ul", this).hide("fast");
    					} else {
    						$("ul", this).show("fast");
    					}
    				}
    			});
    			initMenuTree();
    			
    		});
    		
    		function initMenuTree(){
    			 /* 对树插件的配置信息 */
    		   var setting = {
    		        data: {
    		            simpleData: {
    		                enable: true,
    		                pIdKey: "pid"
    		            }
    		        } ,
    		        view: {
    		        	//用于在节点上固定显示用户自定义控件
    					addDiyDom: function(treeId, treeNode){
    						//treeNode 一个菜单节点
    						$("#" + treeNode.tId + "_ico").removeClass();//.addClass();
    						$("#" + treeNode.tId + "_ico").addClass(treeNode.icon);
    						//$("#" + treeNode.tId + "_span").before("<span class='"+treeNode.icon+"'></span>");
    						//点击不跳转
    						var aObj = $("#" + treeNode.tId + "_a");
    						aObj.attr("href", "javascript:;");
    						aObj.attr("target", "_self");
    					},
    					addHoverDom: function(treeId, treeNode){  
    						var aObj = $("#" + treeNode.tId + "_a"); // tId = permissionTree_1, ==> $("#permissionTree_1_a")
    						//如果已经有了按钮组 就不进行构建按钮组
    						if (treeNode.editNameFlag || $("#btnGroup"+treeNode.tId).length>0) return;
    						//按钮组
    						var s = '<span id="btnGroup'+treeNode.tId+'">';
    						//根节点
    						if ( treeNode.level == 0 ) {
    							//增加按钮  传入当前节点Id
    							s += '<a onclick="addBtn('+treeNode.id+')" class="btn btn-info dropdown-toggle btn-xs" style="margin-left:10px;padding-top:0px;" href="#" >&nbsp;&nbsp;<i class="fa fa-fw fa-plus rbg "></i></a>';
    						} 
    						//二级节点
    						else if ( treeNode.level == 1 ) {
    							//修改按钮
    							s += '<a onclick="updateBtn('+treeNode.id+')" class="btn btn-info dropdown-toggle btn-xs" style="margin-left:10px;padding-top:0px;"  href="#" title="修改权限信息">&nbsp;&nbsp;<i class="fa fa-fw fa-edit rbg "></i></a>';
    							//增加按钮 
    							s += '<a onclick="addBtn('+treeNode.id+')" class="btn btn-info dropdown-toggle btn-xs" style="margin-left:10px;padding-top:0px;" href="#" >&nbsp;&nbsp;<i class="fa fa-fw fa-plus rbg "></i></a>';
    							if (treeNode.children.length == 0) {
    								//删除按钮
    								s += '<a onclick="deleteBtn('+treeNode.id+')" class="btn btn-info dropdown-toggle btn-xs" style="margin-left:10px;padding-top:0px;" href="#" >&nbsp;&nbsp;<i class="fa fa-fw fa-times rbg "></i></a>';
    							}
    						} 
    						//三级节点
    						else if ( treeNode.level == 2 ) {
    							//修改按钮
    							s += '<a onclick="updateBtn('+treeNode.id+')" class="btn btn-info dropdown-toggle btn-xs" style="margin-left:10px;padding-top:0px;"  href="#" title="修改权限信息">&nbsp;&nbsp;<i class="fa fa-fw fa-edit rbg "></i></a>';
    							//删除按钮
    							s += '<a onclick="deleteBtn('+treeNode.id+')" class="btn btn-info dropdown-toggle btn-xs" style="margin-left:10px;padding-top:0px;" href="#">&nbsp;&nbsp;<i class="fa fa-fw fa-times rbg "></i></a>';
    						}
    						s += '</span>';
    						aObj.append(s);
    					},
    					removeHoverDom: function(treeId, treeNode){
    						$("#btnGroup"+treeNode.tId).remove();
    					}
    		        } 
    		    }; 
    			//查询所有的树节点
    		    $.ajax({
    		        type: "GET",
    		        url: "${PATH}/menu/queryMenus",
    		        data: {},
    		        success: function (retVal) {
    		            var zNodes = retVal;
    		            zNodes.push({
    		            	id:0,
    		            	name:'系统菜单'
    		            })
    		            $.fn.zTree.init($("#treeDemo"), setting, zNodes);
    		            var treeObj = $.fn.zTree.getZTreeObj("treeDemo");
    		            treeObj.expandAll(true); 
    		        }
    		    });
    		}
    		
    	 	function addBtn(id){
    			
    			$('#addModal').modal({
    				show:true,
    				//防止鼠标按妞按下去模态框消失
    				backdrop:'static',
    				//防止ESC按下去模态框消失
    				keyboard:true
    			});
    			var pid=$("#addModal input[name='pid']").val(id);
    		}
    		
    		$("#saveBtn").click(function(){
    			var pid=$("#addModal input[name='pid']").val();
    			var name=$("#addModal input[name='name']").val();
    			var url=$("#addModal input[name='url']").val();
    			var icon=$("#addModal input[name='icon']").val();
    			$.ajax({
    				 type: "post",
    			        url: "${PATH}/menu/addMenu",
    			        data: {pid:pid,name:name,url:url,icon:icon},
    			        success: function (retVal) {
    			        	if(retVal=="ok"){
    		    				layer.msg("保存成功", {
    		                        time: 1000,
    		                        icon: 6
    		                    }, function () {
    		                        //1.关掉模态框
    		    				    $("#addModal").modal('hide');
    		                        //2.刷新角色列表
    		                        initMenuTree();
    		                        //3.把输入框设置为空
    		                        var pid=$("#addModal input[name='pid']").val('');
    		            			var name=$("#addModal input[name='name']").val('');
    		            			var url=$("#addModal input[name='url']").val('');
    		            			var icon=$("#addModal input[name='icon']").val('');
    		                    });
    		    			}else{
    		    				layer.msg('菜单保存失败',{
    		                        time: 1000,
    		                        icon: 5
    		                    });
    		    			}
    			        }
    			});
    		});
            function updateBtn(id){
    			
    			$('#updateModal').modal({
    				show:true,
    				//防止鼠标按妞按下去模态框消失
    				backdrop:'static',
    				//防止ESC按下去模态框消失
    				keyboard:true
    			});
    			$.ajax({
    				   type: "post",
    			        url: "${PATH}/menu/queryMenuById",
    			        data: {id:id},
    			        success: function (retVal) {
    			        	if(retVal!=null){
    			        		$("#updateModal input[name='id']").val(retVal.id);
    							$("#updateModal input[name='name']").val(retVal.name);
    							$("#updateModal input[name='url']").val(retVal.url);
    							$("#updateModal input[name='icon']").val(retVal.icon);
    			        	}else{
    			        		layer.msg("查询失败", {
    		                        time: 1000,
    		                        icon: 6
    		                    });
    			        	}
    			        }
    			     });    
    		    }
    		
            $("#updateBtn").click(function(){
            	var id=$("#updateModal input[name='id']").val();
    			var name=$("#updateModal input[name='name']").val();
    			var url=$("#updateModal input[name='url']").val();
    			var icon=$("#updateModal input[name='icon']").val();
            	$.ajax({
    				 type: "post",
    			        url: "${PATH}/menu/updateMenu",
    			        data: {id:id,name:name,url:url,icon:icon},
    			        success: function (retVal) {
    			        	if(retVal=="ok"){
    		    				layer.msg("修改成功", {
    		                        time: 1000,
    		                        icon: 6
    		                    }, function () {
    		                        //1.关掉模态框
    		    				    $("#updateModal").modal('hide');
    		                        //2.刷新角色列表
    		                        initMenuTree();
    		                    });
    		    			}else{
    		    				layer.msg('菜单修改失败',{
    		                        time: 1000,
    		                        icon: 5
    		                    });
    		    			}
    			        }
    			});
            	
            });
            
            
            function deleteBtn(id){
            	layer.confirm('确认删除????', {
    				  btn: ['确认','取消'] //按钮
    				}, function(index){
    		        	$.ajax({
    						 type: "post",
    					        url: "${PATH}/menu/deleteMenu",
    					        data: {id:id},
    					        success: function (retVal) {
    					        	if(retVal=="ok"){
    				    				layer.msg("删除成功", {
    				                        time: 1000,
    				                        icon: 6
    				                    }, function () {
    				                        initMenuTree();
    				                    });
    				    			}else{
    				    				layer.msg("菜单删除失败",{
    				                        time: 1000,
    				                        icon: 5
    				                    });
    				    			}
    					        }
    					    });
    				      layer.close(index);//关闭弹窗
    				});
                 } 
    		
    	</script>
    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    <!DOCTYPE html>
    <html lang="zh_CN">
    <head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta name="description" content="">
    <meta name="author" content="">
    
    <%@ include file="/WEB-INF/jsp/common/css.jsp"%>
    </head>
    <body>
    
    	<jsp:include page="/WEB-INF/jsp/common/top.jsp"></jsp:include>
    	<div class="container-fluid">
    		<div class="row">
    			<jsp:include page="/WEB-INF/jsp/common/sidebar.jsp"></jsp:include>
    			<div class="col-sm-9 col-sm-offset-3 col-md-10 col-md-offset-2 main">
    				<div class="panel panel-default">
    					<div class="panel-heading">
    						<h3 class="panel-title">
    							<i class="glyphicon glyphicon-th"></i> 菜单树
    						</h3>
    					</div>
    					<div class="panel-body">
    						<ul id="treeDemo" class="ztree"></ul>
    					</div>
    				</div>
    			</div>
    		</div>
    	</div>
    	
    	<!-- 添加数据 模态框 -->
    	<div class="modal fade" id="addModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
    		<div class="modal-dialog" role="document">
    			<div class="modal-content">
    				<div class="modal-header">
    					<button type="button" class="close" data-dismiss="modal" aria-label="Close">
    						<span aria-hidden="true">&times;</span>
    					</button>
    					<h4 class="modal-title" id="myModalLabel">添加菜单</h4>
    				</div>
    				<div class="modal-body">
    					<div class="form-group">
    						<label for="name">菜单名称</label> <input type="hidden" name="pid"> <input type="text" class="form-control" id="name" name="name" placeholder="请输入菜单名称">
    					</div>
    					<div class="form-group">
    						<label for="url">菜单URL</label> <input type="text" class="form-control" id="url" name="url" placeholder="请输入菜单URL">
    					</div>
    					<div class="form-group">
    						<label for="icon">菜单图标</label> <input type="text" class="form-control" id="icon" name="icon" placeholder="请输入菜单图标">
    					</div>
    				</div>
    				<div class="modal-footer">
    					<button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
    					<button id="saveBtn" type="button" class="btn btn-primary">保存</button>
    				</div>
    			</div>
    		</div>
    	</div>
    	
    	
    	<!-- 更新数据 模态框 -->
    	<div class="modal fade" id="updateModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
    		<div class="modal-dialog" role="document">
    			<div class="modal-content">
    				<div class="modal-header">
    					<button type="button" class="close" data-dismiss="modal" aria-label="Close">
    						<span aria-hidden="true">&times;</span>
    					</button>
    					<h4 class="modal-title" id="myModalLabel">修改菜单</h4>
    				</div>
    				<div class="modal-body">
    					<div class="form-group">
    						<label for="name">菜单名称</label> <input type="hidden" name="id"> <input type="text" class="form-control" id="name" name="name" placeholder="请输入菜单名称">
    					</div>
    					<div class="form-group">
    						<label for="url">菜单URL</label> <input type="text" class="form-control" id="url" name="url" placeholder="请输入菜单URL">
    					</div>
    					<div class="form-group">
    						<label for="icon">菜单图标</label> <input type="text" class="form-control" id="icon" name="icon" placeholder="请输入菜单图标">
    					</div>
    				</div>
    				<div class="modal-footer">
    					<button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
    					<button id="updateBtn" type="button" class="btn btn-primary">修改</button>
    				</div>
    			</div>
    		</div>
    	</div>
    	<%@ include file="/WEB-INF/jsp/common/js.jsp"%>
    	<%@ include file="/WEB-INF/jsp/menu/function.jsp" %> 
    </body>
    </html>
    

    模态框(layer的东西)

             这个东西还挺好用的不用自己再写一个添加修改的页面,直接在当前页面进行数据的添加和修改,

        样板:

    <!-- 添加数据 模态框 -->
    	<div class="modal fade" id="addModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
    		<div class="modal-dialog" role="document">
    			<div class="modal-content">
    				<div class="modal-header">
    					<button type="button" class="close" data-dismiss="modal" aria-label="Close">
    						<span aria-hidden="true">&times;</span>
    					</button>
    					<h4 class="modal-title" id="myModalLabel">添加菜单</h4>
    				</div>
    				<div class="modal-body">
    					<div class="form-group">
    						<label for="name">菜单名称</label> <input type="hidden" name="pid"> <input type="text" class="form-control" id="name" name="name" placeholder="请输入菜单名称">
    					</div>
    					<div class="form-group">
    						<label for="url">菜单URL</label> <input type="text" class="form-control" id="url" name="url" placeholder="请输入菜单URL">
    					</div>
    					<div class="form-group">
    						<label for="icon">菜单图标</label> <input type="text" class="form-control" id="icon" name="icon" placeholder="请输入菜单图标">
    					</div>
    				</div>
    				<div class="modal-footer">
    					<button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
    					<button id="saveBtn" type="button" class="btn btn-primary">保存</button>
    				</div>
    			</div>
    		</div>
    	</div>
    	
    	
    	<!-- 更新数据 模态框 -->
    	<div class="modal fade" id="updateModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
    		<div class="modal-dialog" role="document">
    			<div class="modal-content">
    				<div class="modal-header">
    					<button type="button" class="close" data-dismiss="modal" aria-label="Close">
    						<span aria-hidden="true">&times;</span>
    					</button>
    					<h4 class="modal-title" id="myModalLabel">修改菜单</h4>
    				</div>
    				<div class="modal-body">
    					<div class="form-group">
    						<label for="name">菜单名称</label> <input type="hidden" name="id"> <input type="text" class="form-control" id="name" name="name" placeholder="请输入菜单名称">
    					</div>
    					<div class="form-group">
    						<label for="url">菜单URL</label> <input type="text" class="form-control" id="url" name="url" placeholder="请输入菜单URL">
    					</div>
    					<div class="form-group">
    						<label for="icon">菜单图标</label> <input type="text" class="form-control" id="icon" name="icon" placeholder="请输入菜单图标">
    					</div>
    				</div>
    				<div class="modal-footer">
    					<button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
    					<button id="updateBtn" type="button" class="btn btn-primary">修改</button>
    				</div>
    			</div>
    		</div>
    	</div>

    展开全文
  • 出自剑指offer的一道题《树的结构》 子树:一颗有n个节点的树也有n个子树,他的每个节点都可以作为根节点构成一颗树 子结构:如下图,红框就是一个子结构,但是不是一颗子树。 换句话说,下图的节点4也是一个子...

    出自剑指offer的一道题《树的子结构》

    子树:一颗有n个节点的树也有n个子树,他的每个节点都可以作为根节点构成一颗树

    子结构:如下图,红框就是一个子结构,但是不是一颗子树。
    换句话说,下图的节点4也是一个子结构但不是子树,这也说应该就好理解了
    在这里插入图片描述
    (图片侵删)

    原题描述:输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)

    public class TreeNode {
        int val = 0;
        TreeNode left = null;
        TreeNode right = null;
    
        public TreeNode(int val) {
            this.val = val;
    
        }
    
        public boolean HasSubtree(TreeNode root1,TreeNode root2) {
            if(root1==null || root2==null)
                return false;
            return JudgeSubtree(root1,root2) || JudgeSubtree(root1.left,root2) || JudgeSubtree(root1.right, root2); //这里注意前面已经判断root2不为空,所以可以直接比较
        }
    
        public boolean JudgeSubtree(TreeNode root1,TreeNode root2){
            if (root2==null)  //边界条件,若root2为空,表示之前的都相同
                return true;
            if (root1==null)  // 若root1为空,root2不为空,表示不能匹配
                return false;
            if (root1.val!=root2.val) //若不相同,就判断左子树或者右子树是否相同
                return JudgeSubtree(root1.left,root2) || JudgeSubtree(root1.right, root2);
            return JudgeSubtree(root1.left, root2.left) && JudgeSubtree(root1.right,root2.right); // 如果当前节点相同,则分别对比左右子树是否相同
        }
    
    展开全文
  • Java树结构

    2019-09-27 18:05:56
    今天在项目中,运用到了Java树结构,是在一个查询中,选择树结构例如图片结构采用了前段最新知识,通过xml结构的数据库,后端Spring映射实现。 代码示例: 数据库: <!-- 取得税种分布 -->...
  • 图片、代码结合,旨在理解树的真正存储的思想。 树的基本名词 树的定义(特征): 每个节点都只有有限个子节点或无子节点; 没有父节点的节点称为根节点; 每一个非根节点有且只有一个父节点; 除了根节点...
  • is_node_layout = l_layout_node "为显示字段设置图片  IMPORTING  e_new_node_key = l_first_key.  it_order-l_key = l_first_key.  MODIFY it_order.  CLEAR it_order.  ENDLOOP.
  • Flutter布局的树结构 flutter中有三棵树,分别是Widget、Element、RenderObject。 其中Widget中只存放基本配置信息,可以当作就是一个数据结构,而RenderObject是实际渲染使用,layout和paint等操作都是...
  • 伐木机 使用可视化节点数据结构。 这个怎么运作 Treevizer遍历您的数据结构以...到DOT文件的结构 import Treevizer treevizer . to_dot ( root , structure_type = "bbt" , dot_path = "tree.dot" ): """ Generate DO
  • vue手写结构

    千次阅读 2020-03-19 17:12:51
    今天项目中有一个三级形功能,写完自己有想写一个根据数据自动生成的树结构。 主要思路:就是结构是一个重复循环,因此需要遍历自己组件。只是生成一级数据,而下面数据没有生成并且报错了。 !...
  • 树的原型图片: 顺序结构:是以数组线性表的格式进行数据存储结构图如下 以parent数组为父节点存储,指向父节点位置 数组顺序输出就是层次遍历 数组B: 顺序输出就是深度优先遍历 树的链式存储 一个标准的...
  • 本文将从最普通二叉查找开始,逐步说明各种解决问题以及面临新问题,从而说明MySQL为什么选择B+作为索引结构。 一、二叉查找(BST):不平衡 二叉查找(BST,Binary Search Tree),也叫二叉排序,...
  • JS 做的树结构 很漂亮 小东西方便用时候直接COPY 使用。。。要合理代码重用 嘿嘿 欢迎多多下载 对了节点的图片忘传大家自己找个更漂亮替代就可以了
  • Python-结构

    2021-05-13 18:45:55
    结构 基础概念 1.定义 ( Tree )是n( n≥0 )个节点有限集合T ,它满足两个条件:有且仅有一个特定称为根( Root )节点;其余节点可以分为m ( m≥0 )个互不相交有限集合T1、T2、Tm,其中每-一个集合又是一...
  • vue 结构应用

    千次阅读 2018-11-08 20:42:13
    一说到结构 肯定涉及递归了 这是毋庸置疑 看着图片 效果确实就是爽  想当年刚开始写时候真是要命呢 还是来一段代码吧   &lt;style lang="scss"&gt; div.ztree_content_wrap { ...
  • 数据结构就是这样地区json。现在有个需求,就是给我一个RegionId,我要找到他本身以及他所有直系父辈RegionId,并且放入一个数组中。找到这个RegionId这一级很容易,但是怎么找到所有直系父辈RegionId让我...
  • 4、将该组件js、less文件放到kpiTree目录下,在kpiTree目录下创建images目录将组件需要的图片放入给目录,在kpiTree目录下创建json文件夹将该组件需要json文件放入改文件夹中,组件便可正常运行。 kpiTre
  • easyui 树结构

    2020-04-20 11:09:29
    我想做一个类似tree这种结构的数据展示,如图所示 1,后台传过来数据结构 index=0,1是子节点数据 index=2,3是父节点数据 注意:父节点数据中ID要与子节点数据中_parentId对应,而且_parentId是指定...
  • //一、优化算法下的树结构遍历  @SuppressWarnings("unchecked")  public String gainTreeFolder(){  //1 设置虚拟根节点  root = new Folders();  root.setFolderId(MyConstants.ID);  root....
  • 递归改变形结构内部嵌套对象的 key 和 value废话不多说先上图片这个...循环一下在调用这个方法 就可以生成自己想要的结构了这样就可以了 本人也是菜的一批 写这个也是费了九牛二虎之力 废话不多说先上图片 下面...
  • jquery 实现的树形表格结构

    热门讨论 2014-01-16 17:30:45
    treeTable是跨浏览器、性能很高jquery的树表组件,它使用非常简单,只需要引用jquery库和一个js文件,接口也很简单。 优点 ◦兼容主流浏览器: 支持IE6和IE6+, Firefox, chrome, Opera, Safari ◦接口简洁: 在普通...
  • 实现后效果图: 没有做gif图片,下次有时间做一下,替换过来... 1)show-checkbox即可以打开树结构前面框框,elementUI没有直接指定单选操作,但是可以通过写方法实现 2):filter-node-method="filterNo...
  • ![图片说明](https://img-ask.csdn.net/upload/201709/14/1505374638_187747.png) ![图片说明]...结构我想用easyui,貌似非常简单 就是不知道怎么下手了。。
  • parsemkv:PowerShell中Matroska .mkv文件解析器,不需要外部工具,可以生成层次结构的对象,还可以选择将漂亮的图片打印到控制台
  • 基于SSH框架实现结构页面还原以及简单登录功能(没有注册功能),基于数据库设计表存储结构,该存储结构能够通用,改变内容(如换成公司人员组成)也可以存储前言一、什么是SSH框架二、Struts+Spring+...
  • 这是一个形 每个节点都是一个人 每个人都有销售业绩 (业绩=自己下面所有子节点业绩之和) 当每个人业绩达到一定数量时给一定提成 但是 自己下面人把提成拿了 自己就拿不到那么多了 ![图片说明]...
  • 树结构结构示例: id , attr , level , parent_id 1 , 111 , 1 , null 2 , 222 , 2 , 1 3 , 333 , 4 , 2 4 , 444 ,1 , null 5 , 555 , 3 , 4 希望转成每条记录都有父节点信息结果 id...
  • PHP一个比较完善的树结构代码

    千次阅读 2019-03-06 10:22:43
    &lt;?php /** * 通用树型类,可以生成任何树型结构 */ class tree { /** * 生成树型结构所需要2维数组 * @var array ... * 生成树型结构所需修饰符号,可以换成图片 * @var array */ v...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,822
精华内容 728
关键字:

树的结构图片