美文网首页
JS二叉树遍历

JS二叉树遍历

作者: LeeYaMaster | 来源:发表于2019-05-22 15:54 被阅读0次

关于定义,性质这些,我就直接从书上抄过来吧。

二叉树的定义:

二叉树(Binary Tree)是n个节点的有限集合,或者是空树(n=0),或者是由一个根节点及两颗互不相交的、分别成为左子树和右子树的二叉树所组成。
有序树:如果将树中结点的各子树看成从左至右是有次序的(即不能互换),则称该树为有序树,否则称为无序树。在有序树中最左边的子树的根称为第一个孩子,最右边的称为最后一个孩子。
森林: m棵互不相交的树的集合
二叉树:节点的一个有限集合,该集合或者为空,或者由一个根节点加上两棵左子树和右子树组成。二叉树是每个节点最多有两个子树的树结构。
根节点:一棵树最上面的节点称为根节点。
父节点、子节点:如果一个节点下面连接多个节点,那么该节点称为父节点,它下面的节点称为子节点。
叶子节点:没有任何子节点的节点称为叶子节点。
兄弟节点:具有相同父节点的节点互称为兄弟节点。
节点度:节点拥有的子树数。
节点的层数:根节点层数为1,其他节点的层数为双亲节点的层数+1
树的度: 一棵树中最大的结点度数
树的深度:从根节点开始(其深度为0)自顶向下逐层累加的。
树的高度:从叶子节点开始(其高度为0)自底向上逐层累加的。54的高度是2,根节点23的高度是3。

二叉树与树的区别:

1、二叉树节点的子树要区分左子树和右子树,即使在节点只有一颗子树的情况下也要明确指出该子树是左子树还是右子树。
2、二叉树节点的最大度为2,而树中不限制节点的度数。

二叉树的性质

1、在非空二叉树中,第i层的结点总数最大为2^i-1,i>=1(满树情况)
2、深度为h的二叉树最多有 2^h-1个结点(h>=1),最少有h个结点
3、对于任意一棵二叉树,设其总结点数为N,如果其叶结点(度为0的结点)数为N0,而度数为2的结点总数为N2,则N0=N2+1,度为1的结点数N1=N-N0-N2
4、具有n个结点的完全二叉树的深度为(logN)+1,底数为2
5、有N个结点的完全二叉树各结点如果用顺序方式存储,如果所有结点从1开始编号则结点之间有如下关系:
若i为结点编号则 如果i>1,则其父结点的编号为i/2
如果2×i<=N,则其左儿子(即左子树的根结点)的编号为2×i
若2×i>N,则无左儿子
如果2×i+1<=N,则其右儿子的结点编号为2×i+1
若2×i+1>N,则无右儿子
6、此外,如果所有结点从0开始编号,那么相应的i号节点的双亲节点的编号为(i-1)/2,左孩子的编号为2i+1,右孩子编号为2i+2。
7、给定N个结点,能构成h(N)种不同的二叉树。 h(N)为卡特兰数的第N项。h(n)=C(2*n,n)/(n+1)
8、设有i个分支点,I为所有分支点的道路长度总和,J为叶的道路长度总和J=I+2i

JS代码实现

            <script>
            function BinaryTree(){
                let Node = function(key){
                    this.key = key;
                    this.left = null;
                    this.right = null;
                }
                let root = null;
                let insertNode = function(node,newNode){
                    if(newNode.key < node.key){
                        if(node.left === null){
                            node.left = newNode;
                        }else{
                            insertNode(node.left,newNode);
                        }
                    }else{
                        if(node.right === null){
                            node.right = newNode;
                        }else{
                            insertNode(node.right,newNode);
                        }
                    }
                }
                this.insert = function(key){
                    let newNode = new Node(key);
                    if(root === null){
                        root = newNode;
                    } else {
                        insertNode(root,newNode);
                    }
                };
                //中序遍历
                let 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);
                }
            }
            let nodes = [8,3,10,1,6,14,4,7,13];
            let binaryTree = new BinaryTree();
            nodes.forEach(function(key){
                binaryTree.insert(key);
            })
            let callback = function(key){
                console.log(key);
            }
            binaryTree.inOrderTraverse(callback);
        </script>

于是JS二叉树中序遍历就完成啦。

相关文章

  • JS来搞定二叉DOM树的遍历

    js构建一颗二叉树: 前序遍历:首先访问根结点,然后遍历左子树,最后遍历右子树 修改为DOM二叉树: 中序遍历首先...

  • 二叉树 基础操作

    二叉树的使用 二叉树结构 先序创建二叉树 DFS 先序遍历二叉树 中序遍历二叉树 后序遍历二叉树 BFS 层次遍历...

  • 关于二叉树的算法题

    前序遍历中序遍历后序遍历判断是否是平衡二叉树判断是否是对称二叉树判断二叉树高度按照层遍历二叉树判断二叉树宽度

  • 二叉树遍历

    二叉树 二叉树的存储结构 前序遍历 中序遍历 后序遍历 遍历代码 反转二叉树 深入学习二叉树 二叉树-你必须要懂!...

  • leetcode-day13-平衡二叉树[剑指 Offer 55

    今日的题目,我之前文章有写过,前序中序后序都在这篇文章里 js实现二叉树的前序遍历,中序遍历,后续遍历[https...

  • 二叉树操作

    树节点 逐行顺序解析二叉树 前序遍历二叉树 中序遍历二叉树 后序遍历二叉树 删除指定数值的节点 前序遍历顺序存储的...

  • 关于函数递归和迭代的转化, 及尾递归相关知识的接触和思考

    javascript实现数据结构: 树和二叉树,二叉树的遍历和基本操作 js 二叉树 【数据结构与算法】深入浅出递...

  • 数据结构与算法之二叉树遍历(七)

    目录 前序遍历中序遍历后序遍历层序遍历遍历方式的选择条件根据遍历结果重构二叉树翻转二叉树计算二叉树的高度判断一棵树...

  • 二叉树三种遍历Swift代码实现

    二叉树的三种遍历 二叉树 前序遍历 中序遍历 后序遍历 另外 不得不说,得到二叉树的前序遍历和中序遍历的结果或者后...

  • 二叉树的遍历

    二叉树的遍历 二叉树遍历 分为前序遍历、中序遍历和后序遍历。 前序遍历 (DLR) 先访问根节点,然后前序遍历左子...

网友评论

      本文标题:JS二叉树遍历

      本文链接:https://www.haomeiwen.com/subject/lcruzqtx.html