查看并输出二叉树不同的地方:
<!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>
8.二叉树的diff算法,查看并输出二叉树不同的地方(JavaScript版)
原文:https://www.cnblogs.com/lanshanxiao/p/13189287.html