码迷,mamicode.com
首页 > 编程语言 > 详细

8.二叉树的diff算法,查看并输出二叉树不同的地方(JavaScript版)

时间:2020-06-24 20:04:26      阅读:69      评论:0      收藏:0      [点我收藏+]

标签:isp   pre   删除   lang   fft   return   不同的   直接   sed   

查看并输出二叉树不同的地方:

技术图片
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        function Node(value) {
            this.value = value;
            this.left = null;
            this.right = null;
        }

        var nodeA = new Node("a");
        var nodeB = new Node("b");
        var nodeC = new Node("c");
        var nodeD = new Node("d");
        var nodeE = new Node("e");
        var nodeF = new Node("f");
        var nodeG = new Node("g");

        nodeA.left = nodeB;
        nodeA.right = nodeC;
        nodeB.left = nodeD;
        nodeB.right = nodeE;
        nodeC.left = nodeF;
        nodeC.right = nodeG;

        var a = new Node("a");
        var b = new Node("b");
        var c = new Node("c");
        var d = new Node("d");
        var e = new Node("e");
        var f = new Node("f");
        var g = new Node("g");

        a.right = b;
        a.left = c;
        b.left = d;
        b.right = e;
        c.left = f;
        c.right = g;

        //要找到两个二叉树之间有什么不同
        //1.新增了节点
        //2.删除了节点
        //3.修改了节点
        //不同的地方,存入diffList中
        function diffTree(root1, root2, diffList) {
            var diff = diffList || [];
            if (root1 == root2) return diff; //若两者是同一颗树,则直接返回diff
            if (root1 == null && root2 != null) { //root2新增了一个节点
                diff.push({
                    type: "新增",
                    origin: null,
                    new: root2
                });
            } else if (root1 != null && root2 == null) { //root2删除了一个节点
                diff.push({
                    type: "删除",
                    origin: root1,
                    new: null
                });
            } else if (root1.value != root2.value) { //root2节点的值被修改了
                diff.push({
                    type: "修改",
                    origin: root1.value,
                    new: root2.value
                });
                //二叉树的节点值被修改,还需要再次判断子节点
                diffTree(root1.left, root2.left, diff); //判断左子树
                diffTree(root1.right, root2.right, diff); //判断右子树
            } else {
                diffTree(root1.left, root2.left, diff); //判断左子树
                diffTree(root1.right, root2.right, diff); //判断右子树
            }

            return diff;
        }

        var diffList = [];
        var diff = diffTree(nodeA, a, diffList);
        console.log(diff);
    </script>
</body>

</html>
二叉树diff算法

 

8.二叉树的diff算法,查看并输出二叉树不同的地方(JavaScript版)

标签:isp   pre   删除   lang   fft   return   不同的   直接   sed   

原文地址:https://www.cnblogs.com/lanshanxiao/p/13189287.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!