如何easyui tree删除节点trietree上的一个节点

如何删除treectrl根节点下的所有数据(vc++6.0)
[问题点数:40分,结帖人kingshen111]
如何删除treectrl根节点下的所有数据(vc++6.0)
[问题点数:40分,结帖人kingshen111]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2011年11月 专题开发/技术/项目大版内专家分月排行榜第一2011年10月 专题开发/技术/项目大版内专家分月排行榜第一2011年9月 专题开发/技术/项目大版内专家分月排行榜第一2011年8月 专题开发/技术/项目大版内专家分月排行榜第一2011年7月 专题开发/技术/项目大版内专家分月排行榜第一2011年6月 C/C++大版内专家分月排行榜第一
2011年7月 C/C++大版内专家分月排行榜第二2011年5月 专题开发/技术/项目大版内专家分月排行榜第二
本帖子已过去太久远了,不再提供回复功能。Trie有一个很有趣的用途,那就是自动提示。而且,前不久在一次面试里,也需要用Trie来解答。所以,在此对这个数据结构进行总结。
Trie,又称单词查找树或键树,是一种形结构。典型应用是用于统计和排序大量的(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:最大限度地减少无谓的字符串比较,查询效率比高。
它有3个基本性质:
不包含,除根节点外每一个节点都只包含一个。从到某一,上经过的连接起来,为该对应的。每个的所有包含的都不相同。
下面这个图就是Trie的表示,每一条边表示一个字符,如果结束,就用星号表示。在这个Trie结构里,我们有下面字符串,比如do, dork, dorm等,但是Trie里没有ba, 也没有sen,因为在a, 和n结尾,没有结束符号(星号)。
有了这样一种数据结构,我们可以用它来保存一个字典,要查询改字典里是否有相应的词,是否非常的方便呢?我们也可以做智能提示,我们把用户已经搜索的词存在Trie里,每当用户输入一个词的时候,我们可以自动提示,比如当用户输入 ba, 我们会自动提示 bat 和 baii.
现在来讨论Trie的实现。
首先,我们定义一个Abstract Trie,Trie 里存放的是一个Node。这个类里有三个操作,一个是插入,一个是查询,另一个是startwiths(包含前缀)。具体实现放在后面。
TrieNode { &
vector&TrieNode*&
TrieNode():content('
'), isend(false),
TrieNode(char
ch):content(ch), isend(false),
TrieNode* subNode(char
(!children.empty()) { &
child : children) { &
(child-&content == ch) &
~TrieNode() { &
child : children) &
Trie() { &
TrieNode(); &
insert(string
(search(s)) return;
TrieNode* curr = &
ch : s) { &
TrieNode* child = curr-&subNode(ch);
(child != nullptr)
TrieNode *newNode =
TrieNode(ch); &
curr-&children.push_back(newNode);
curr = newN &
++curr-& &
curr-&isend
search(string
TrieNode* curr = &
ch : key) { &
curr = curr-&subNode(ch);
(curr == nullptr)
curr-&isend == true;
startsWith(string
prefix) { &
TrieNode* curr = &
ch : prefix) { &
curr = curr-&subNode(ch);
(curr == nullptr)
~Trie() { &
TrieNode* &
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1191次
排名:千里之外Extjs5.0的treepanel节点上的文件夹图标怎么去掉?_百度知道import java.awt.BorderL
import java.awt.event.ActionE
import java.awt.event.ActionL
import java.awt.event.MouseA
import java.awt.event.MouseE
import java.awt.event.MouseL
import javax.swing.JB
import javax.swing.JF
import javax.swing.JOptionP
import javax.swing.JP
import javax.swing.JScrollP
import javax.swing.JT
import javax.swing.tree.DefaultMutableTreeN
import javax.swing.tree.DefaultTreeM
import javax.swing.tree.TreeN
import javax.swing.tree.TreeP
public class EditJTree&&&
&&& //上面JTree对象对应的model&&&
&&& DefaultTreeM&&&
&&& //定义几个初始节点&&&
&&& DefaultMutableTreeNode root = new DefaultMutableTreeNode(&中国&);&&&&
&&& DefaultMutableTreeNode guangdong = new DefaultMutableTreeNode(&广东&);&&&
&&& DefaultMutableTreeNode guangxi = new DefaultMutableTreeNode(&广西&);&&&
&&& DefaultMutableTreeNode foshan = new DefaultMutableTreeNode(&佛山&);&&&
&&& DefaultMutableTreeNode shantou = new DefaultMutableTreeNode(&汕头&);&&&
&&& DefaultMutableTreeNode guilin = new DefaultMutableTreeNode(&桂林&);&&&
&&& DefaultMutableTreeNode nanning = new DefaultMutableTreeNode(&南宁&);&&&
&&& //定义需要被拖动的TreePath&&&
&&& TreePath moveP&&&
&&& JButton addSiblingButton = new JButton(&添加兄弟节点&);&&&
&&& JButton addChildButton = new JButton(&添加子节点&);&&&
&&& JButton deleteButton = new JButton(&删除节点&);&&&
&&& JButton editButton = new JButton(&编辑当前节点&);&&&
&&& public void init()&&&
&&&&&&& guangdong.add(foshan);&&&
&&&&&&& guangdong.add(shantou);&&&
&&&&&&& guangxi.add(guilin);&&&
&&&&&&& guangxi.add(nanning);&&&
&&&&&&& root.add(guangdong);&&&
&&&&&&& root.add(guangxi);&&&
&&&&&&&&&&&
&&&&&&& jf = new JFrame(&树&);&&&
&&&&&&& tree = new JTree(root);&&&
&&&&&&& //获取JTree对应的TreeModel对象&&&
&&&&&&& model = (DefaultTreeModel)tree.getModel();&&&
&&&&&&& //设置JTree可编辑&&&
&&&&&&& tree.setEditable(true);&&&
&&&&&&& MouseListener ml = new MouseAdapter()&&&&
&&&&&&& {&&&
&&&&&&&&&&& //按下鼠标时候获得被拖动的节点&&&
&&&&&&&&&&& public void mousePressed(MouseEvent e)&&&
&&&&&&&&&&& {&&&
&&&&&&&&&&&&&&& //如果需要唯一确定某个节点,必须通过TreePath来获取。&&&
&&&&&&&&&&&&&&& TreePath tp = tree.getPathForLocation(e.getX(), e.getY());&&&
&&&&&&&&&&&&&&& if (tp != null)&&&
&&&&&&&&&&&&&&& {&&&
&&&&&&&&&&&&&&&&&&& movePath =&&&
&&&&&&&&&&&&&&& }&&&
&&&&&&&&&&& }&&&
&&&&&&&&&&& //鼠标松开时获得需要拖到哪个父节点&&&
&&&&&&&&&&& public void mouseReleased(MouseEvent e)&&&
&&&&&&&&&&& {&&&
&&&&&&&&&&&&&&& //根据鼠标松开时的TreePath来获取TreePath&&&
&&&&&&&&&&&&&&& TreePath tp = tree.getPathForLocation(e.getX(), e.getY());&&&
&&&&&&&&&&&&&&& if (tp != null && movePath != null)&&&
&&&&&&&&&&&&&&& {&&&
&&&&&&&&&&&&&&&&&&& //阻止向子节点拖动&&&
&&&&&&&&&&&&&&&&&&& if (movePath.isDescendant(tp) && movePath != tp)&&&
&&&&&&&&&&&&&&&&&&& {&&&
&&&&&&&&&&&&&&&&&&&&&&& JOptionPane.showMessageDialog(jf, &目标节点是被移动节点的子节点,无法移动!&,&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&& &非法操作&, JOptionPane.ERROR_MESSAGE );&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&& }&&&
&&&&&&&&&&&&&&&&&&& //既不是向子节点移动,而且鼠标按下、松开的不是同一个节点&&&
&&&&&&&&&&&&&&&&&&& else if (movePath != tp)&&&
&&&&&&&&&&&&&&&&&&& {&&&
&&&&&&&&&&&&&&&&&&&&&&& System.out.println(tp.getLastPathComponent());&&&
&&&&&&&&&&&&&&&&&&&&&&& //add方法可以先将原节点从原父节点删除,再添加到新父节点中&&&
&&&&&&&&&&&&&&&&&&&&&&& ((DefaultMutableTreeNode)tp.getLastPathComponent()).add(&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&& (DefaultMutableTreeNode)movePath.getLastPathComponent());&&&
&&&&&&&&&&&&&&&&&&&&&&& movePath =&&&
&&&&&&&&&&&&&&&&&&&&&&& tree.updateUI();&&&
&&&&&&&&&&&&&&&&&&& }&&&
&&&&&&&&&&&&&&& }&&&
&&&&&&&&&&& }&&&
&&&&&&& };&&&
&&&&&&& tree.addMouseListener(ml);&&&
&&&&&&& JPanel panel = new JPanel();&&&
&&&&&&& addSiblingButton.addActionListener(new ActionListener()&&&
&&&&&&& {&&&
&&&&&&&&&&& public void actionPerformed(ActionEvent event)&&&
&&&&&&&&&&& {&&&
&&&&&&&&&&&&&&& //获取选中节点&&&
&&&&&&&&&&&&&&& DefaultMutableTreeNode selectedNode&&&
&&&&&&&&&&&&&&&&&&& = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();&&&
&&&&&&&&&&&&&&& //如果节点为空,直接返回&&&
&&&&&&&&&&&&&&& if (selectedNode == null)&&&
&&&&&&&&&&&&&&& //获取该选中节点的父节点&&&
&&&&&&&&&&&&&&& DefaultMutableTreeNode parent&&&
&&&&&&&&&&&&&&&&&&& = (DefaultMutableTreeNode)selectedNode.getParent();&&&
&&&&&&&&&&&&&&& //如果父节点为空,直接返回&&&
&&&&&&&&&&&&&&& if (parent == null)&&&
&&&&&&&&&&&&&&& //创建一个新节点&&&
&&&&&&&&&&&&&&& DefaultMutableTreeNode newNode = new DefaultMutableTreeNode(&新节点&);&&&
&&&&&&&&&&&&&&& //获取选中节点的选中索引&&&
&&&&&&&&&&&&&&& int selectedIndex = parent.getIndex(selectedNode);&&&
&&&&&&&&&&&&&&& //在选中位置插入新节点&&&
&&&&&&&&&&&&&&& model.insertNodeInto(newNode, parent, selectedIndex + 1);&&&
&&&&&&&&&&&&&&& //--------下面代码实现显示新节点(自动展开父节点)-------&&&
&&&&&&&&&&&&&&& //获取从根节点到新节点的所有节点&&&
&&&&&&&&&&&&&&& TreeNode[] nodes = model.getPathToRoot(newNode);&&&
&&&&&&&&&&&&&&& //使用指定的节点数组来创建TreePath&&&
&&&&&&&&&&&&&&& TreePath path = new TreePath(nodes);&&&
&&&&&&&&&&&&&&& //显示指定TreePath&&&
&&&&&&&&&&&&&&& tree.scrollPathToVisible(path);&&&
&&&&&&&&&&& }&&&
&&&&&&& });&&&
&&&&&&& panel.add(addSiblingButton);&&&
&&&&&&& addChildButton.addActionListener(new ActionListener()&&&
&&&&&&& {&&&
&&&&&&&&&&& public void actionPerformed(ActionEvent event)&&&
&&&&&&&&&&& {&&&
&&&&&&&&&&&&&&& //获取选中节点&&&
&&&&&&&&&&&&&&& DefaultMutableTreeNode selectedNode&&&
&&&&&&&&&&&&&&&&&&& = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();&&&
&&&&&&&&&&&&&&& //如果节点为空,直接返回&&&
&&&&&&&&&&&&&&& if (selectedNode == null)&&&
&&&&&&&&&&&&&&& //创建一个新节点&&&
&&&&&&&&&&&&&&& DefaultMutableTreeNode newNode = new DefaultMutableTreeNode(&新节点&);&&&
&&&&&&&&&&&&&&& //直接通过model来添加新节点,则无需通过调用JTree的updateUI方法&&&
&&&&&&&&&&&&&&& //model.insertNodeInto(newNode, selectedNode, selectedNode.getChildCount());&&&
&&&&&&&&&&&&&&& //直接通过节点添加新节点,则需要调用tree的updateUI方法&&&
&&&&&&&&&&&&&&& selectedNode.add(newNode);&&&
&&&&&&&&&&&&&&& //--------下面代码实现显示新节点(自动展开父节点)-------&&&
&&&&&&&&&&&&&&& TreeNode[] nodes = model.getPathToRoot(newNode);&&&
&&&&&&&&&&&&&&& TreePath path = new TreePath(nodes);&&&
&&&&&&&&&&&&&&& tree.scrollPathToVisible(path);&&&
&&&&&&&&&&&&&&& tree.updateUI();&&&
&&&&&&&&&&& }&&&
&&&&&&& });&&&
&&&&&&& panel.add(addChildButton);&&&
&&&&&&& deleteButton.addActionListener(new ActionListener()&&&
&&&&&&& {&&&
&&&&&&&&&&& public void actionPerformed(ActionEvent event)&&&
&&&&&&&&&&& {&&&
&&&&&&&&&&&&&&& DefaultMutableTreeNode selectedNode&&&
&&&&&&&&&&&&&&&&&&& = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();&&&
&&&&&&&&&&&&&&& if (selectedNode != null && selectedNode.getParent() != null)&&&
&&&&&&&&&&&&&&& {&&&
&&&&&&&&&&&&&&&&&&& //删除指定节点&&&
&&&&&&&&&&&&&&&&&&& model.removeNodeFromParent(selectedNode);&&&
&&&&&&&&&&&&&&& }&&&
&&&&&&&&&&& }&&&
&&&&&&& });&&&
&&&&&&& panel.add(deleteButton);&&&
&&&&&&& editButton.addActionListener(new ActionListener()&&&
&&&&&&& {&&&
&&&&&&&&&&& public void actionPerformed(ActionEvent event)&&&
&&&&&&&&&&& {&&&
&&&&&&&&&&&&&&& TreePath selectedPath = tree.getSelectionPath();&&&
&&&&&&&&&&&&&&& if (selectedPath != null)&&&
&&&&&&&&&&&&&&& {&&&
&&&&&&&&&&&&&&&&&&& //编辑选中节点&&&
&&&&&&&&&&&&&&&&&&& tree.startEditingAtPath(selectedPath);&&&
&&&&&&&&&&&&&&& }&&&
&&&&&&&&&&& }&&&
&&&&&&& });&&&
&&&&&&& panel.add(editButton);&&&
&&&&&&& jf.add(new JScrollPane(tree));&&&
&&&&&&& jf.add(panel , BorderLayout.SOUTH);&&&
&&&&&&& jf.pack();&&&
&&&&&&& jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&&&
&&&&&&& jf.setVisible(true);&&&
&&& public static void main(String[] args)&&&&
&&&&&&& new EditJTree().init();&&&
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:132651次
积分:2147
积分:2147
排名:第13019名
原创:35篇
转载:315篇
评论:18条
(1)(5)(1)(3)(5)(7)(10)(1)(3)(18)(13)(25)(20)(31)(6)(15)(20)(8)(4)(20)(63)(58)(14)

我要回帖

更多关于 easyui tree删除节点 的文章

 

随机推荐