根據前序和中序,使用JavaScript撰寫代碼得到二叉樹
<!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>
var qian = ["a", "b", "d", "e", "c", "f", "g"];
var zhong = ["d", "b", "e", "a", "f", "c", "g"];
function Node(value){
this.value =https://www.cnblogs.com/lanshanxiao/p/ value;
this.left = null;
this.right = null;
}
//通過前序和中序還原二叉樹
function resumeTree(qian, zhong){
if(qian == null || zhong == null || qian.length == 0 || zhong.length == 0 || qian.length != zhong.length) return null;//qian和zhong陣列為null或者長度為0,或者兩者長度不相等,直接回傳
var root = new Node(qian[0]);//前序第一個節點是二叉樹的根節點
var index = zhong.indexOf(qian[0]);//找到中序里根節點所在的索引
var zhongLeft = zhong.slice(0, index);//獲取中序的左子樹
var zhongRight = zhong.slice(index + 1, zhong.length);//獲取中序的右子樹
var qianLeft = qian.slice(1, index + 1);//獲取前序的左子樹
var qianRight = qian.slice(index + 1, qian.length);//獲取前序的右子樹
root.left = resumeTree(qianLeft, zhongLeft);//找到節點的左節點
root.right = resumeTree(qianRight, zhongRight);//找到節點的右節點
return root;//回傳二叉樹
}
var tree = resumeTree(qian, zhong);//獲取二叉樹
console.log(tree.left);//列印左子樹
console.log(tree.right);//列印右子樹
</script>
</body>
</html>
前序和中序的到二叉樹.html
根據中序和后續,使用JavaScript撰寫代碼得到二叉樹
<!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>
var hou = ["d", "e", "b", "f", "g", "c", "a"];
var zhong = ["d", "b", "e", "a", "f", "c", "g"];
function Node(value){
this.value =https://www.cnblogs.com/lanshanxiao/p/ value;
this.left = null;
this.right = null;
}
//通過后序和中序還原二叉樹
function resumeTree(hou, zhong){
if(hou == null || zhong == null || hou.length == 0 || hou.length == 0 || hou.length != zhong.length) return null;//hou和zhong陣列為null或者長度為0,或者兩者長度不相等,直接回傳
var root = new Node(hou[hou.length - 1]);//后序最后一個節點是二叉樹的根節點
var index = zhong.indexOf(hou[hou.length - 1]);//找到中序里根節點所在的索引
var zhongLeft = zhong.slice(0, index);//獲取中序的左子樹
var zhongRight = zhong.slice(index + 1, zhong.length);//獲取中序的右子樹
var houLeft = hou.slice(0, index);//獲取后序的左子樹
var houRight = hou.slice(index, hou.length - 1);//獲取后序的右子樹
root.left = resumeTree(houLeft, zhongLeft);//找到節點的左節點
root.right = resumeTree(houRight, zhongRight);//找到節點的右節點
return root;//回傳二叉樹
}
var tree = resumeTree(hou, zhong);//獲取二叉樹
console.log(tree.left);//列印左子樹
console.log(tree.right);//列印右子樹
</script>
</body>
</html>
View Code
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/58578.html
標籤:JavaScript
