zoukankan      html  css  js  c++  java
  • js 二叉树遍历

    二叉树定义这里不再赘述。

    我这里有个二叉树:

    var tree = {
        "id": 0,
        "name": "root",
        "left": {
            "id": 1,
            "name": "Simon",
            "left": {
                "id": 3,
                "name": "Carl",
                "left": {
                    "id": 7,
                    "name": "Lee",
                    "left": {
                        "id": 11,
                        "name": "Fate"
                    }
                },
                "right": {
                    "id": 8,
                    "name": "Annie",
                    "left": {
                        "id": 12,
                        "name": "Saber"
                    }
                }
            },
            "right": {
                "id": 4,
                "name": "Tony",
                "left": {
                    "id": 9,
                    "name": "Candy"
                }
            }
        },
        "right": {
            "id": 2,
            "name": "right",
            "left": {
                "id": 5,
                "name": "Carl",
            },
            "right": {
                "id": 6,
                "name": "Carl",
                "right": {
                    "id": 10,
                    "name": "Kai"
                }
            }
        }
    };

    1.使用前序遍历,并将所有name输出。

    function getListWithDLR(node) {
        if(node){
            console.log(node.name);
            getListWithDLR(node.left);
            getListWithDLR(node.right);
        }
    }
    getListWithDLR(tree); //调用函数,并把二叉树传进去。

    2.使用中序遍历,并将所有name输出。

    function getListWithLDR(node) {
        if(node){
            getListWithLDR(node.left);
            console.log(node.name);
            getListWithLDR(node.right);
        }
    }
    getListWithLDR(tree);

    3.使用后序遍历,并将所有name输出。

    function getListWithLRD(node) {
        if(node){
            getListWithLDR(node.left);
            getListWithLDR(node.right);
            console.log(node.name);
        }
    }
    getListWithLRD(tree);

    原理:使用迭代。

    4. 根据name找id。

    function findIdByName(name,node) {
        if(node){
            if (node.name === name) {
                console.log(node.id);
            } else {
                findIdByName(name, node.left);
                findIdByName(name, node.right);
            }
        }
    }
    findIdByName('Carl',tree);
  • 相关阅读:
    隐马尔科夫模型
    计算复杂性理论——函数
    STM32硬件I2C调试
    FPGA简单图像处理
    STM32配置使用外部12MHz晶振
    STM32从模式接受数据
    STM32 I2C读写EEPROM(中断模式)
    STM32 I2C读写EEPROM(POLLING模式)
    STM32串口实验
    STM32使用TIM闪烁LED——PWM方式
  • 原文地址:https://www.cnblogs.com/yadiblogs/p/9164571.html
Copyright © 2011-2022 走看看