JavaScript二叉树的递归遍历方法

二叉树是由根节点,左子树,右子树组成,左子树和友子树分别是一个二叉树。

下面是一个二叉树的例子:

{
    "ruleId":"",
    "name":"客户年龄大于20",
    "id":"root",
    "expression":"age>20",
    "yes":{
        "name":"客户年龄大于25",
        "id":"root-true",
        "expression":"age>25",
        "yes":{
            "name":"可贷金额为五万",
            "id":"root-true-true",
            "expression":"money = 50000"
        },
        "no":{
            "name":"可贷金额为三万",
            "id":"root-true-false",
            "expression":"money = 30000"
        }
    },
    "no":{
        "name":"客户年龄小于18",
        "id":"root-false",
        "expression":"age<18",
        "yes":{
            "name":"不可贷款",
            "id":"root-false-true",
            "expression":"money = 0"
        },
        "no":{
            "name":"可贷金额为一万",
            "id":"root-false-false",
            "expression":"money = 10000"
        }
    }
}

1)先序遍历

function preorder(data){
    if(data){
        console.log(data.name);
        preorder(data.yes);
        preorder(data.no)
    }
}  

2)中序遍历

function preorder(data){
    if(data){
        preorder(data.yes);
        console.log(data.name);
        preorder(data.no)
    }
}

3)后序遍历

function preorder(data){
    if(data){
        preorder(data.yes);
        preorder(data.no);
        console.log(data);
    }
}

这三种都属于深度优先遍历,因为优先往深处访问。

时间: 2024-10-28 19:01:26

JavaScript二叉树的递归遍历方法的相关文章

二叉树的递归遍历

#include<iostream> #include<stack> using namespace std; /*二叉树的前序遍历,按照 根节点->左孩子->右孩子 */ typedef struct node { char data; struct node *lchild,*rchild; }BinTree; void creatBinTree(BinTree * &root){ char ch; if(ch=getchar()){ if(ch=='#')

二叉树的递归遍历和非递归遍历(附详细例子)

mnesia在频繁操作数据的过程可能会报错:** WARNING ** Mnesia is overloaded: {dump_log, write_threshold},可以看出,mnesia应该是过载了.这个警告在mnesia dump操作会发生这个问题,表类型为disc_only_copies .disc_copies都可能会发生. 如何重现这个问题,例子的场景是多个进程同时在不断地mnesia:dirty_write/2 mnesia过载分析 1.抛出警告是在mnesia 增加dump

辛星算法教程第一节即二叉树的递归遍历

我们都知道,二叉树的递归遍历可以分为三种:前序遍历.中序遍历和后序遍历,其实这三种遍历方式大同小异,由于都是使用递归实现的,因此也比较简单. 首先是tree.h文件,代码如下: #ifndef TREE_H #define TREE_H #include <stdio.h> #include <malloc.h> #include <assert.h> typedef int ElemType; typedef struct Btree { ElemType val;

javascript数组常用的遍历方法

本篇文章给大家带来的内容是关于javascript数组常用的遍历方法(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 前言 本文主要介绍数组常见遍历方法:forEach.map.filter.find.every.some.reduce,它们有个共同点:不会改变原始数组. 一.forEach:遍历数组 1 2 3 4 5 var colors = ["red","blue","green"]; // ES5遍历数组方法

二叉树的递归遍历与非递归遍历-javascript

1 function TreeNode(val) { // 树节点构造方式 2 this.val = val; 3 this.left = null; 4 this.right = null; 5 } 6 7 function generateTree() { 8 let root = new TreeNode(10); 9 let left1 = new TreeNode(5); 10 let left2 = new TreeNode(4); 11 let left3 = new TreeNo

python数据结构与算法——二叉树结构与遍历方法

先序遍历,中序遍历,后序遍历 ,区别在于三条核心语句的位置 层序遍历  采用队列的遍历操作第一次访问根,在访问根的左孩子,接着访问根的有孩子,然后下一层 自左向右一一访问同层的结点 # 先序遍历 # 访问结点,遍历左子树,如果左子树为空,则遍历右子树, # 如果右子树为空,则向上走到一个可以向右走的结点,继续该过程 preorder(t):    if t:       print t.value       preorder t.L       preorder t.R # 中序遍历 # 从根

算法与数据结构基础4:C++二叉树实现及遍历方法大全

binary search tree,中文翻译为二叉搜索树.二叉查找树或者二叉排序树.简称为BST. 本文集齐了二叉树的五大遍历算法:先序遍历.中序遍历.后序遍历.深度优先遍历和广度优先遍历(同层遍历也就是深度优先遍历). // BSTree.h #include <cstdio> #include <iostream> #include <stack> #include <queue> using namespace std; // binary sear

2、二叉树:递归遍历

对二叉树而言,最为核心的操作就是遍历.遍历可以用递归的方式,也可以用循环的方式. 就递归遍历而言,又有“先序.中序.后续”三种不同的遍历顺序.通过下面的一个示意图可以从感官上来体会一下三种不同的遍历顺序: 为了学习二叉树的相关算法,首先需要构建一个二叉树的抽象类public abstract class BiTreeAbstract<T> ,该类中有一个表示结点的内部类Node,将结点的数据类型定义为泛型T以方便将其用于不同的数据类型. 1 package com.magicode.datas

数据结构之二叉树篇卷三 -- 二叉树非递归遍历(With Java)

Nonrecursive Traversal of Binary Tree First I wanna talk about why should we use <code>Stack</code> to implement this algorithm. I think it is due to the FILO feature of Stack, and that really matters and makes sense when you get around with t