`
hje
  • 浏览: 288214 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

tree 遍历方法

阅读更多
public function walkTree(tree:Tree, item:Object, startAtParent:Boolean = false):void
{
    // get the Tree's data descriptor
    var descriptor:ITreeDataDescriptor = tree.dataDescriptor;
    var cursor:IViewCursor;
   
    var parentItem:Object;
    var childItem:Object;
    var childItems:Object;
   
    // if the item is null, stop
    if(item == null)
        return;
       
    // do we back up one level to the item's parent
    if(startAtParent)
    {
        // get the parent
        parentItem = tree.getParentItem(item);
        // is the parent real
        if(parentItem)
        {
            trace("|-- Parent Node ", parentItem[tree.labelField]);
            // if the parent is a branch
            if(descriptor.isBranch(parentItem))
            {
                // if the branch has children to run through
                if(descriptor.hasChildren(parentItem))
                {
                    // get the children of the branch
                    // this part of the algorithm contains the item
                    // passed
                    childItems = descriptor.getChildren(parentItem);
                }
            }
            // if the branch has valid child items
            if(childItems)
            {
                // create our back step cursor
                cursor = childItems.createCursor();
                // loop through the items parent's children (item)
                while(!cursor.afterLast)
                {
                    // get the current child item
                    childItem = cursor.current;
                    var label:String = childItem[tree.labelField];
                    var branch:Boolean = descriptor.isBranch(childItem);
                   
                    // good place for a custom method()
                    trace("Sibling Nodes :: ", label, "Is Branch :: ", branch);
                   
                    // if the child item is a branch
                    if(descriptor.isBranch(childItem))
                        // traverse the childs branch all the way down
                        // before returning
                        walkTree(tree, childItem);
                    // do it again!
                    cursor.moveNext();
                }
            }
        }
    }
    else// we don't want the parent OR this is the second iteration
    {
        // if we are a branch
        if(descriptor.isBranch(item))
        {
            // if the branch has children to run through
            if(descriptor.hasChildren(item))
            {
                // get the children of the branch
                childItems = descriptor.getChildren(item);
            }
           
            // if the child items exist
            if(childItems)
            {
                // create our cursor pointer
                cursor = childItems.createCursor();
                // loop through all of the children
                // if one of these children are a branch we will recurse
                while(!cursor.afterLast)
                {
                    // get the current child item
                    childItem = cursor.current;

                    var label:String =  childItem[tree.labelField];
                    var branch:Boolean = descriptor.isBranch(childItem);
                   
                    // good place for a custom method()
                    trace("-- Sub Node :: ", label, "Is Branch :: ", branch);

                    // if the child item is a branch
                    if(descriptor.isBranch(childItem))
                        // traverse the childs branch all the way down
                        // before returning
                        walkTree(tree, childItem);
                    // check the next child
                    cursor.moveNext();
                }
            }
        }
    }
}









2:使用
假设有个树,随便写一个:
<tree name="test">
<node name="a">
<d  name="b"> </d>
<e  name="c"> </e>
</node>
<node name="1"> </node>
<node name="I"> </node>
</tree>;
选择起始节点为name="a"的那个节点
用walkTree(tree对象, 起始节点)则
直接走下半部,不回溯期父节点,直接遍历a下子节点,结果就是遍历b,c

用walkTree(tree对象, 起始节点,true)则
先回溯到a的父,即test再遍历,结果就是遍历test,a,b,c,1,I
分享到:
评论

相关推荐

    tree的遍历

    在IT领域,树是一种非常重要的数据结构,...通过理解和应用不同的遍历方法,开发者可以有效地处理树结构,执行诸如查找、排序、复制等任务。在实际项目中,了解并熟练掌握这些技巧对于编写高效且健壮的代码至关重要。

    python xml.etree.ElementTree遍历xml所有节点实例详解

    python xml.etree.ElementTree遍历xml所有节点 XML文件内容: 代码: #-*- coding: UTF-8 -*- # 从文件中读取数据 import xml.etree.ElementTree as ET #全局唯一标识 unique_id = 1 #遍历所有的节点

    JSP EXT 遍历 TREE

    在实现TREE遍历功能时,这两个文件是必不可少的,需要在JSP页面中正确引入。 example4.js可能是一个包含具体TREE遍历逻辑的示例脚本。在EXT中,遍历TREE通常通过遍历TREE节点来完成,这可以通过EXT的API来实现。...

    tree的创建与遍历

    tree,ArrayList&lt;tree&gt;的创建与遍历插入 面试时可能会用到哦 1、根据 根节点rootId创建treeSize个子节点的tree树 2、根据list及父节点 列出父节点下的所有子节点 3、查找根节点 根据父节点找到对应的树 不足之处望...

    VFP中TREE树遍历

    VFP中TREE树遍历 无限制目录树

    二叉树4种遍历方法的C语言实现

    在`BinaryTree.c`和`Binary.h`这两个文件中,`BinaryTree.c`很可能是实现这些遍历方法的源代码,而`Binary.h`则可能包含了二叉树节点的定义和相关函数声明。在`BinaryTree.c`中,你可以找到如下的函数定义: - `...

    数据结构实验 二叉树的遍历方法

    在本实验中,我们主要探讨的是二叉树的遍历方法,这是数据结构中的一个重要概念。二叉树是一种特殊的树形数据结构,每个节点最多有两个子节点,通常分为左子节点和右子节点。二叉树遍历是访问二叉树中所有节点的过程...

    php遍历目录生成树状结构

    一个类,可以遍历一个目录,将该目录下所有文件以及子目录及其文件都遍历,生成一个层次分明的数组,还可以将遍历的结果生成一个树状的字符串,直接echo到浏览器。 |-|a.txt |-|b.txt |-|c目录 |---|d.txt |---|c1...

    遍历和查找外部程序 Tree-View 中的项目 文档

    本文主要讨论如何遍历和查找外部程序中Tree-View控件的项目。 首先,了解遍历Tree-View控件的基本原理。在Windows API中,可以通过发送消息来操作控件。对于Tree-View控件,有以下几个关键的消息: 1. TVM_...

    二叉树的创建及遍历方法

    二叉树是计算机科学中数据结构的一个重要概念,它是一种特殊的树形结构,每个节点最多有两个子节点,通常称为左...在实际编程中,根据不同的应用场景选择合适的二叉树结构和遍历方法,可以大大提高程序的效率和可读性。

    层次遍历多元树(在文件tree.cpp中3个空)、先根遍历、后根遍历的递归函数

    在这个问题中,我们关注的是层次遍历、先根遍历和后根遍历这三种在树的遍历方法中的递归实现。接下来,我们将深入探讨这些概念以及如何在C++中通过函数实现它们。 首先,我们来看层次遍历,也称为宽度优先搜索(BFS...

    tree_遍历_ideawfi_二叉树_数据结构_

    在这个场景中,我们关注的是二叉树的遍历方法以及相关属性的计算。我们将深入探讨二叉树的先序、中序和后序遍历,以及如何计算二叉树的宽度、深度和节点关系。 **二叉树遍历** 1. **先序遍历**:这是二叉树遍历的...

    遍历算法遍历方案及几个算法实现

    在二叉树的遍历中,通常有三种主要的遍历方法:前序遍历、中序遍历和后序遍历。这些遍历方式都是基于二叉树的递归定义,即每个节点包含一个值、一个左子节点和一个右子节点。 1. **前序遍历(Preorder Traversal)**...

    图的遍历和生成树求解

    这两种遍历方法各有优劣,DFS在处理某些问题时可能更为节省空间,而BFS则常用于寻找最短路径。 接下来,我们讨论最小生成树(Minimum Spanning Tree, MST)。在加权无向图中,最小生成树是一棵树形子集,它包含原图...

    MFC 目录树遍历程序

    4. **使用CFileFind遍历目录**:创建一个CFileFind对象,然后使用其FindFile()和FindNextFile()方法开始遍历目录。这些方法会找到当前目录下的所有文件和子目录。 5. **将文件和目录添加到树视图**:对于每个找到的...

    二叉树的遍历,前序遍历 中序遍历 后序遍历

    在实际应用中,"tree-traversal-master"这个压缩包可能包含了一个关于二叉树遍历的项目,其中包括了实现这些遍历方法的源代码示例。通过学习和理解这些示例,你可以更好地掌握二叉树遍历的原理和技巧,从而在解决...

    二叉树遍历 单步演示

    在Java编程中,有三种主要的遍历方法:前序遍历、中序遍历和后序遍历。 1. **前序遍历**(根-左-右): - 首先访问根节点。 - 然后递归地遍历左子树。 - 最后递归地遍历右子树。 2. **中序遍历**(左-根-右):...

    tree_反向层次遍历树_4321_

    "tree_反向层次遍历树_4321_"这个标题指的是一个特定的树遍历方法,即反向层次遍历(也称为反向深度优先搜索)。在标准的层次遍历(通常是从根节点开始,按照从上至下、从左至右的顺序访问节点)中,反向层次遍历则...

    两种遍历方法实现赫夫曼编码

    在本文中,我们将深入探讨两种遍历方法来实现赫夫曼编码:一种是基于栈的递归方法,另一种则是无栈的非递归方法。 首先,我们来理解赫夫曼树的基本构建过程。假设我们有一组字符及其对应的频率,如{'a': 3, 'b': 1,...

Global site tag (gtag.js) - Google Analytics