递归遍历

递归遍历: 查找指定父节点下所有子代节点
如何: 2步:
   1. 先遍历所有直接子节点
   2. 在遍历直接子节点时,对每个子节点调用和父节点完全相同的方法。
算法: 深度优先遍历: 每次都优先遍历子节点
所有子节点遍历完,才返回遍历兄弟节点
递归的效率: 极低。
解决: 绝大多数递归都可用循环代替

遍历API: 每次仅遍历下一个节点,可用循环反复执行(了解)
1. 节点迭代器:
如何: 2步:
1. 创建迭代器对象:
var iterator=document.createNodeIterator(
           parent,NodeFilter.SHOW_ALL,                     null, false
                                      .SHOW_ELEMENT
);
2. var 原先的节点对象=iterator.nextNode(); 跳到下一个节点如果返回null,说明到头了
内置的就是深度优先遍历算法。

html

<!DOCTYPE HTML><html>   <head>      <title>遍历节点树</title>      <meta charset="utf-8"/>      <script src="js/3_2.js"></script>   </head>   <body>      <span>Hello World !</span>      <ul id="nav">         <li>电影</li>         <li>综艺            <ul>               <li>跑男</li>               <li>爸爸</li>               <li>极限</li>            </ul>         </li>         <li>剧集</li>      </ul>      <script src="js/3_2.js"></script>   </body></html>

js
//定义函数:遍历给定父元素下的直接子节点function getChildren1(parent){    //如果parent不是文本节点,就输出节点名,否则输出节点值    console.log(parent.nodeType!=3?parent.nodeName:parent.nodeValue);    //遍历parent下所有直接子节点    var children=parent.childNodes;    for(var i=0;i<children.length;i++){        //对父元素的每个子节点调用和父元素完全相同的函数        getChildren1(children[i]);    }}function getChildren2(parent){    //创建迭代器对象    var iterator=document.createNodeIterator(        parent,NodeFilter.SHOW_ALL,null,false    );    //用循环反复调用迭代器的nextnode()跳向下一个节点    var node;    while ((node=iterator.nextNode())!=null){        console.log(node.nodeType!=3?node.nodeName:node.nodeValue);    }}getChildren2(document.body);

原文地址:https://www.cnblogs.com/sske531549304/p/9418867.html

时间: 2024-09-27 23:37:36

递归遍历的相关文章

二叉树的非递归遍历--京东2015笔试回忆

题目回忆: C/C++研发试卷:偏重于数据结构的考察,编程题有2题+1题附加题: 1.输入整数n,求m,m>9,m中各个数位的乘积=n的最小整数;如n=36,m=49; 2.二叉树前序遍历的非递归实现(本文的总结) 3.求第n个数,这个序列满足(2^i)*(3^j)*(5^k),前7个为:2,3,4,5,6,8,10 .... 小题有基本的数据结构.程序运行结果.SQL题目. 4.删除表格用DROP命令,死锁产生的条件: 4.1互斥使用(资源独占) 一个资源每次只能给一个进程使用 4.2.不可强

数据结构——二叉树遍历之“递归与非递归遍历”

简述 二叉树的遍历分为先序遍历.中序遍历和后序遍历.如下图所示: 递归遍历 private void bianli1(List<Integer> list, TreeNode root) { // 先序遍历 if (root == null) { return; } list.add(root.val); bianli1(list, root.left); bianli1(list, root.right); } private void bianli2(List<Integer>

JAVA递归、非递归遍历二叉树(转)

原文链接: JAVA递归.非递归遍历二叉树 import java.util.Stack; import java.util.HashMap; public class BinTree { private char date; private BinTree lchild; private BinTree rchild; public BinTree(char c) { date = c; } // 先序遍历递归 public static void preOrder(BinTree t) {

递归遍历二叉树

递归遍历分三种: 1.前序遍历二叉树(二叉树非空) 1.访问根节点 2.前序遍历左子树 3.前序遍历右子树 2.中序遍历二叉树(二叉树非空) 1.中序遍历左子树 2.访问根节点 3.中序遍历右子树 3.后序遍历二叉树(二叉树非空) 1.后序遍历左子树 2.后序遍历右子树 3.访问根节点 三种递归的算法遍历,终止条件是二叉树为空的时候. 记忆的方法呢,前中后,都是以根节点命名的,前序,先访问根节点,中序,根节点在第二,后序,根节点最后进行访问.

树的递归与非递归遍历总结

树的递归遍历遍历很简单,非递归遍历要复杂一些,非递归先序.中序.后序遍历需要用一个辅助栈,而层次遍历则需要一个辅助队列. 树的结构: 1 public class Tree<T> { 2 private T data; 3 private Tree<T> left; 4 private Tree<T> right; 5 ... 6 } 用策略模式定义一个访问工具: 1 public interface Visitor<T> { 2 void process(

二叉树的递归遍历 Tree UVa548

题意:给一棵点带权的二叉树的中序和后序遍历,找一个叶子使得他到根的路径上的权值的和最小,如果多解,那该叶子本身的权值应该最小 解题思路:1.用getline()输入整行字符,然后用stringstream获得字符串中的数字 2.用数组in_oder[]和post_order[]分别表示中序遍历和后序遍历的顺序,用数组rch[]和lch[]分别表示结点的左子树和右子树 3.用递归的办法根据遍历的结果还原二叉树(后序遍历的最后一个树表示的是根节点,中序遍历的中间一个表示根节点) 4.二叉树构造完成后

数组递归遍历有个问题

[  {    "id": 35,    "code": "110100",    "name": "北京市",    "type": 1,    "regions": [      {        "id": 373,        "code": "110101",        "name&

二叉树的中序、先序、后序遍历非递归遍历算法(使用堆栈,用循环实现)

1 typedef struct TreeNode *BinTree; 2 typedef BinTree Position; 3 struct TreeNode{ 4 ElementType Data; 5 BinTree Left; 6 BinTree Right; 7 }; 8 BinTree BT; 9 void InOrderTraversal(BinTree BT)//中序遍历非递归遍历算法(使用堆栈,用循环实现) 10 { 11 BinTree T=BT; 12 Stack S=C

Java学习(十八):二叉树的三种递归遍历

二叉树的三种递归遍历: 1 public class StudentNode 2 { 3 private String name; 4 5 private StudentNode leftNode; 6 7 private StudentNode rightNode; 8 9 public String getName() 10 { 11 return name; 12 } 13 14 public void setName(String name) 15 { 16 this.name = na

史上最简明易懂非递归遍历二叉树算法

巧若拙(欢迎转载,但请注明出处:http://blog.csdn.net/qiaoruozhuo) 遍历二叉树的递归函数是体现了算法之美的高妙算法,思路清晰,代码简洁,读之赏心悦目.代码例如以下: 程序代码: void PreOrderTraverse_R(BiTree BT)//採用递归方式先序遍历二叉树BT { if(BT != NULL) { printf("%c", BT->data);//输出该结点(根结点) PreOrderTraverse_R(BT->lchi