java 树结构 java递归获取子节点出所有节点后 页面怎么写

&>&java树结构递归里面详细说明
java树结构递归里面详细说明
上传大小:37KB
java后台常用的树结构,通过递归写成的。里面详细介绍了。树结构的用法实例。以及参考说明等。
综合评分:3(5位用户评分)
下载个数:
{%username%}回复{%com_username%}{%time%}\
/*点击出现回复框*/
$(".respond_btn").on("click", function (e) {
$(this).parents(".rightLi").children(".respond_box").show();
e.stopPropagation();
$(".cancel_res").on("click", function (e) {
$(this).parents(".res_b").siblings(".res_area").val("");
$(this).parents(".respond_box").hide();
e.stopPropagation();
/*删除评论*/
$(".del_comment_c").on("click", function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_invalid/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parents(".conLi").remove();
alert(data.msg);
$(".res_btn").click(function (e) {
var q = $("#form1").serializeArray();
console.log(q);
var res_area_r = $.trim($(".res_area_r").val());
if (res_area_r == '') {
$(".res_text").css({color: "red"});
$.post("/index.php/comment/do_comment_reply/", q,
function (data) {
if (data.succ == 1) {
var $target,
evt = e || window.
$target = $(evt.target || evt.srcElement);
var $dd = $target.parents('dd');
var $wrapReply = $dd.find('.respond_box');
console.log($wrapReply);
var mess = $(".res_area_r").val();
var str = str.replace(/{%header%}/g, data.header)
.replace(/{%href%}/g, 'http://' + window.location.host + '/user/' + data.username)
.replace(/{%username%}/g, data.username)
.replace(/{%com_username%}/g, _username)
.replace(/{%time%}/g, data.time)
.replace(/{%id%}/g, data.id)
.replace(/{%mess%}/g, mess);
$dd.after(str);
$(".respond_box").hide();
$(".res_area_r").val("");
$(".res_area").val("");
$wrapReply.hide();
alert(data.msg);
}, "json");
/*删除回复*/
$(".rightLi").on("click",'.del_comment_r', function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_comment_del/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parent().parent().parent().parent().parent().remove();
$(e.target).parents('.res_list').remove()
alert(data.msg);
//填充回复
function KeyP(v) {
$(".res_area_r").val($.trim($(".res_area").val()));
评论共有1条
什么玩意。。。
审核通过送C币
JSON for Java
创建者:tan3739
JAVA GUI 图形编程系列
创建者:e98123
java开发工具
创建者:hrm108
上传者其他资源上传者专辑
JAVA开发的一个小程序
ssh框架的介绍以及优缺点
开发技术热门标签
VIP会员动态
CSDN下载频道资源及相关规则调整公告V11.10
下载频道用户反馈专区
下载频道积分规则调整V1710.18
spring mvc+mybatis+mysql+maven+bootstrap 整合实现增删查改简单实例.zip
资源所需积分/C币
当前拥有积分
当前拥有C币
为了良好体验,不建议使用迅雷下载
java树结构递归里面详细说明
会员到期时间:
剩余下载个数:
剩余C币:593
剩余积分:0
为了良好体验,不建议使用迅雷下载
积分不足!
资源所需积分/C币
当前拥有积分
您可以选择
程序员的必选
绿色安全资源
资源所需积分/C币
当前拥有积分
当前拥有C币
(仅够下载10个资源)
为了良好体验,不建议使用迅雷下载
资源所需积分/C币
当前拥有积分
当前拥有C币
为了良好体验,不建议使用迅雷下载
资源所需积分/C币
当前拥有积分
当前拥有C币
您的积分不足,将扣除 10 C币
为了良好体验,不建议使用迅雷下载
你当前的下载分为234。
你还不是VIP会员
开通VIP会员权限,免积分下载
你下载资源过于频繁,请输入验证码
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
若举报审核通过,可奖励20下载分
被举报人:
wuyouhuitailang
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:
java树结构递归里面详细说明&&&&&&&&&&&&&&&&&&
posts - 294,comments - 5,trackbacks - 0
一、基本概况
在我的项目中,常常会用到树形结构的数据,最为明显的就是左边菜单栏,类似于window folder一样的东西。
而我之前一直是借助前端封装好的ZTree等工具实现展示,而后台则通常使用递归进行数据的查找。通常,我们在设计数据库表的时候,一般会使用三个字段:id,name,pid。如下图所示:
二、代码实现
首先是建立实体类:
&span style="font-family:KaiTi_GB2312;font-size:18"& private S
private S&/span&
编写实体类的get和set方法。
然后,我们通常会有以下的几个方法(通常情况,封装粒度不同,方法的实现个数和内容也不同):
1,找到所有的父节点
&span style="font-family:KaiTi_GB2312;font-size:18"&public List&TreeEntity& findAllParents() {
String sql = "select * from test where pid is null or pid='' ";
List&TreeEntity& treeList =
conn = DbUtil.getConnection();
pstmt = conn.prepareStatement(sql);
rs = pstmt.executeQuery();
treeList = new ArrayList&TreeEntity&();
while (rs.next()) {
TreeEntity myTree = new TreeEntity();
myTree.setId(rs.getString("id"));
myTree.setName(rs.getString("name"));
myTree.setPid(rs.getString("pid"));
treeList.add(myTree);
} catch (SQLException e) {
e.printStackTrace();
} finally {
DbUtil.close(pstmt);
DbUtil.close(conn);
return treeL
2,根据父节点找到所有的孩子
&span style="font-family:KaiTi_GB2312;font-size:18"&public List&TreeEntity& findChildByPid(String pid) {
String sql = "select * from test where pid='" + pid + "'";
List&TreeEntity& treeList =
conn = DbUtil.getConnection();
pstmt = conn.prepareStatement(sql);
rs = pstmt.executeQuery();
treeList = new ArrayList&TreeEntity&();
while (rs.next()) {
TreeEntity myTree = new TreeEntity();
myTree.setId(rs.getString("id"));
myTree.setName(rs.getString("name"));
myTree.setPid(rs.getString("pid"));
treeList.add(myTree);
} catch (SQLException e) {
e.printStackTrace();
} finally {
DbUtil.close(pstmt);
DbUtil.close(conn);
return treeL
备注:这两个方法可以合并,这里是为了让自己更好的理解,而写了两个方法。可以判断传入的pid的值,确定其查找的是父节点,还是根据父节点查找子节点。
3,查看是否存在子节点
&span style="font-family:KaiTi_GB2312;font-size:18"& public boolean HasChild(String pid) {
boolean flag =
String sql = "select * from test where pid='" + pid + "'";
int count = 0;
conn = DbUtil.getConnection();
pstmt = conn.prepareStatement(sql);
rs = pstmt.executeQuery();
while(rs.next()){
if (count & 0) {
} catch (SQLException e) {
e.printStackTrace();
} finally {
DbUtil.close(pstmt);
DbUtil.close(conn);
4,使用递归拼接父节点的子节点
&span style="font-family:KaiTi_GB2312;font-size:18"& public void BindChildByParent(String pid, String prefix) {
if (this.HasChild(pid)) {
// 得到当前父节点下的所有孩子
List&TreeEntity& list = this.findChildByPid(pid);
// 循环打印当前父节点下的孩子
for (int i = 0; i & list.size(); i++) {
System.out.println("|----"+prefix+list.get(i).getName());
if (this.HasChild(list.get(i).getId())) {
this.BindChildByParent(list.get(i).getId(),"--");
&span style="font-family:KaiTi_GB2312;font-size:18"& public void TreeHtml() {
// 找到所有的父节点
List&TreeEntity& treeList1 = this.findAllParents();
if (treeList1 != null) {
for (int i = 0; i & treeList1.size(); i++) {
TreeEntity tree = treeList1.get(i);
// 打印父节点
System.out.println("|--" + tree.getName());
// 绑定孩子
this.BindChildByParent(tree.getId(), "");
System.out.println("没有数据!");
6,main方法调用,及实现结果
&span style="font-family:KaiTi_GB2312;font-size:18"& public static void main(String[] args) {
Tree tree = new Tree();
tree.TreeHtml();
三、代码思考
最近,由于考试,看了数据结构 这本书。首先,我是在想,大家都用的这种方法,到底好在哪儿了,还有就是,为什么在我们的数据库设计中,树的度的概念没有体现出来。其次是,对于树的遍历,有非递归的方式,我想也许,我也可以不用递归,就实现树形结构的数据查找。于是乎,请看下文:
为什么我不想用递归:
1,经过查证,系统使用递归算法,需要系统堆栈处理。当树的深度很大时,由于系统支撑不住,会呈现死亡状态。
2,递归算法的运行效率较低,无论是耗费的计算时间还是占用的存储空间都比非递归算法要多。
3,最为直接的原因:很长一段时间里,我都不能理解递归算法,我总在想,可不可以用我会的,我喜欢的 方式,去解决我面临的问题?
递归的好处:
结构清晰,可读性强,而且容易用数学归纳法来证明算法的正确性,因此它为设计算法、调试程序带来很大方便。&
事实证明,对于树结构的数据搜索,完全可以不使用递归。我总算完成了我自己的梦想,终于,我可以不用递归,也可以实现树结构的查找了。更为高兴的是,事实证明,采用非递归的方式,在我接触到的项目中,它有更大的优势。
下一篇播客,介绍怎么用非递归的方式查找树结构的数据!至此,我好像觉得自己又变得不一样了的感觉,我把数据结构这本书的内容,完全结合到自己的项目中,并且用这些东西,去改造去理解我的代码。开心,不过还有图,我不知道怎么用的,关于图,我想到了非关系型数据库,再去验证吧!
阅读(...) 评论()树的子结构—递归、Java - David2427的专栏 - CSDN博客
树的子结构—递归、Java
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
主要思路:
(1)在tree1中寻找tree2的根节点,如果找到了,就接着往下匹配左右节点,如果没有找到,就直接返回false,表示匹配失败;
(2)加入tree1的某个节点和tree2的根节点相等,但是左右子树并不相同,并不能说明tree2就不是tree1的子结构,应该继续往下寻找;
如上图所示,根节点1相同,但是左右子树并不相同,此时并不能说tree2不是tree1的子机构,因为在tree1的左子树中包含tree2这个结构。
思想比较简答,但是这个题感觉考得是代码的完整性和健壮性,就是对边界的判断。
主要考虑:
一、在寻找相同的根节点时:
(1)两颗树为空,直接返回false;
(2)任意一棵树为空,直接返回false;
(3)两棵树都不为空:
3.1 节点值相等,则判断节点之外的子结构;
3.2 节点值不相等,那么用tree1的当前节点的左孩子与tree2的根节点匹配;
3.3 tree1的当前节点的左孩子与tree2的根节点值不相等,用tree1的当前节点的右孩子与tree2的根节点匹配。
二、判断tree2是不是tree1的子结构
(1)tree1为空,tree2不为空,直接返回false,因为tree1的树的结构是大于等于tree2的;
(2)如果tree2为空,说明递归完成,之前的匹配都成功,直接返回true
(3)节点的值不相等,返回false。
综上分析,代码如下:
public class TreeNode {
int val = 0;
TreeNode left =
TreeNode right =
public TreeNode(int val) {
this.val =
public class Solution {
public boolean HasSubtree(TreeNode root1,TreeNode root2) {
boolean result = false;
if(root1 != null && root2 != null){
if(root1.val == root2.val){
result = DoseTree1HaveTree2(root1,root2);
if(!result){
result = HasSubtree(root1.left,root2);
if(!result){
result = HasSubtree(root1.right,root2);
boolean DoseTree1HaveTree2(TreeNode tree1,TreeNode tree2){
if(tree1 == null && tree2 != null)
return false;
if(tree2 == null)
return true;
if(tree1.val != tree2.val)
return false;
return DoseTree1HaveTree2(tree1.left,tree2.left) && DoseTree1HaveTree2(tree1.right,tree2.right);
我的热门文章下次自动登录
现在的位置:
& 综合 & 正文
Java递归删除树结构数据
分享一个Java使用递归删除树结构数据的。
存储:每个节点有一个ID属性和ParentID属性
树结构, Node0为根节点:
|-----Node21
|-----Node22
|-------Node31
|-----Node23
|-----Node24
|-------Node32
关键代码片段:
public void delete(String id){
List&UserGroup& groups=new ArrayList&UserGroup&();
//必须New一个对象。
groups=userGroupDao.findSubGroup(id);
//找出子节点
for(UserGroup group:groups) {
delete(group.getId());
userGroupDao.delete(id);
调用方法:如果要删除Node0及其下所有节点,只需传入Node0的ID。
&&&&推荐文章:
【上篇】【下篇】

我要回帖

更多关于 java递归查询父节点 的文章

 

随机推荐