Javascript -- 二叉树(先序,中序,后序实现)

树的遍历详解:Mr.J--树的遍历方式详解

Javascript实现二叉树:Javascript -- 二叉树实现

先序遍历的顺序:NLR(根节点->左结点->右结点)

中序遍历的顺序:LNR(左节点->根结点->右结点)

后序遍历的顺序:LRN(左结点->右结点->根节点)

先序遍历

先序遍历的顺序:NLR(根节点->左结点->右结点)

//前序遍历代码实现
var preOrderTraverseNode = function (node, callback) {
    if (node !== null) {
        callback(node.key);     //根节点
        preOrderTraverseNode(node.left, callback);              //左节点
        preOrderTraverseNode(node.right, callback);             //右节点
    }
}
this.preOrderTraverse = function (callback) {
    //回调函数
    preOrderTraverseNode(root, callback);
}

测试

var nodes = [8, 3, 10, 1, 6, 14, 4, 7, 13];
        var binaryTree = new BinaryTree();
        nodes.forEach(function (key) {
            binaryTree.insert(key);
        });
        //遍历整个二叉树
        var callback = function (key) {
            console.log(key);
        }
        binaryTree.preOrderTraverse(callback);

 

中序遍历

中序遍历的顺序:LNR(左节点->根结点->右结点)

//中序遍历代码实现
var inOrderTraverseNode = function (node, callback) {
    if (node !== null) {
        //当前节点不为空,访问其左子树
        inOrderTraverseNode(node.left, callback);
        callback(node.key);
        //把当前节点的值传入至回调函数中
        inOrderTraverseNode(node.right, callback);
    }
}
//当要输出某一个节点的值,把节点的值传入到回调函数中,回调函数决定怎么输出
this.inOrderTraverse = function (callback) {
    //把上一个回调函数的参数传进来
    inOrderTraverseNode(root, callback);
}

测试

var nodes = [8, 3, 10, 1, 6, 14, 4, 7, 13];
        var binaryTree = new BinaryTree();
        nodes.forEach(function (key) {
            binaryTree.insert(key);
        });
        //遍历整个二叉树
        var callback = function (key) {
            console.log(key);
        }
        binaryTree.inOrderTraverse(callback);

后序遍历

后序遍历的顺序:LRN(左结点->右结点->根节点)

//后序遍历代码实现
var postOrderTraverseNode = function (node, callback) {
    if (node !== null) {
        postOrderTraverseNode(node.left, callback);     //左节点    
        postOrderTraverseNode(node.right, callback);    //右节点
        callback(node.key);                             //根节点
    }
}
this.postOrderTraverse = function (callback) {
    //回调函数
    postOrderTraverseNode(root, callback);
}

测试

var nodes = [8, 3, 10, 1, 6, 14, 4, 7, 13];
var binaryTree = new BinaryTree();
nodes.forEach(function (key) {
    binaryTree.insert(key);
});
//遍历整个二叉树
var callback = function (key) {
    console.log(key);
}
binaryTree.postOrderTraverse(callback);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值