用JS完成数据结构----排序二叉树

排序二叉树

《用JS完成数据结构----排序二叉树》

如上图为典范的排序二叉树,左孩子的值比节点的值小,右孩子的值比节点的值大,关于详细的树的定义及二叉树的定义能够百度或查阅相干材料。

排序二叉树的建立

  1. 建立道理
    排序二叉树的建立道理与排序二叉树的定义一致,即左孩子的值比当前节点的值小,右孩子的值比当前节点的值大。
  2. 代码完成
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>binary-tree</title>
    <link rel="stylesheet" href="">
</head>
<body>
    
    <script  type="text/javascript" charset="utf-8">
        
        //建立一个排序二叉树
        //
        function BinaryTree() {
            //节点类
            var Node = function(key) {
                this.key = key
                this.left = null
                this.right = null
            }

            // 根节点
            var root = null

            // 1
            var insertNode = function(node, newNode) {
                if(node !== null) {
                    if(newNode.key < node.key) {
                        insertNode(node.left, newNode)
                        if(node.left == null) {
                            node.left = newNode
                        }
                    }else{
                        insertNode(node.right, newNode)
                        if(node.right == null) {
                            node.right = newNode
                        }
                    }
                }

                return null
            }

            //插进去节点
            this.insert = function(key) {
                var newNode = new Node(key)
                if(root === null) {
                    root = newNode
                }else {
                    insertNode(root, newNode)
                }
            }

            this.getTree = function() {
                return root
            }
        }


        var tree = new BinaryTree()
        var nodes = [8, 3, 10, 1, 6, 14, 4, 7, 11, 15]
        nodes.forEach(function(item) {
            tree.insert(item)
        })

        console.log(tree.getTree())




    </script>
</body>
</html>

以上就是建立排序二叉树的完成体式格局:
重点在于插进去节点的详细完成,即诠释1的代码片断。
个中比较难明白的点在于递归是怎样实行,
取当前的节点为{key: 1, left:null, right:null},则当前树以下图:

《用JS完成数据结构----排序二叉树》

对该树举行插进去

           var insertNode = function(node, newNode) {
                if(node !== null) {
                    if(newNode.key < node.key) {
                        insertNode(node.left, newNode)
                        if(node.left == null) {
                            node.left = newNode
                        }
                    }else{
                        insertNode(node.right, newNode)
                        if(node.right == null) {
                            node.right = newNode
                        }
                    }
                }

                return null
            }

首先由根节点8动身,进入node的key为8的栈内1比根节点8要小,进入递归,即进入到了node的key为3的栈内,以下所示:

        3
   -----------------
        8
  --------------------------

当前的值比3小再进入3的左孩子null的栈内

    
        null
    ------------
        3
   -----------------
        8
  --------------------------
    

因为null的栈内,node为null,马上退出当前栈,返回至node的key为3的栈,发明左孩子为null,则将key为1的node变成key为3的node的左孩子,同时退出3的栈,返回至8的栈,8的栈左孩子不null,不做任何操纵,晓得当前要领实行终了,跳出8的栈,返回至要领地点的实行环境的栈,节点插进去终了,再举行下一个节点的插进去,操纵则同上。以上的诠释,假如配合上浏览器的断点调试,食用更佳,更好明白顺序的全部实行历程。

当一切节点插进去终了以后,该排序二叉树也建立终了。

二叉树建立终了以后则可对二叉树举行相干的操纵(遍历,查找,节点删除等)【待续】

    原文作者:jiejiewu
    原文地址: https://segmentfault.com/a/1190000015980006
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞