1、首先是利用建構函式建立乙個二叉樹的的資料結構
(注意:在js中沒有這樣的變數,故使用陣列)
function
treenode
(x)
2、先分析,二叉樹先序遍歷,即第乙個元素為根節點,在中序遍歷中,根節點之前的所有元素為左子樹(長度為llen),之後的所有元素為右子樹(r長度為len),現在,再回到先序遍歷,根節點之後llen長度的元素順序為左子樹的先序遍歷順序,右子樹同理,故而可使用遞迴來構建。
3、注意:陣列的slice方法「取前不取後」
完整**如下:
//由先序遍歷和中序遍歷構造二叉樹
function
treenode
(x)
var pre = [1, 2, 4, 7, 3, 5, 6, 8],
vin = [4, 7, 2, 1, 5, 3, 8, 6];
function
reconstructbinarytree
(pre, vin)
var rootnode = pre[0];
var index = vin.indexof(rootnode);
var lchildvinarr = vin.slice(0, index),
rchildvinarr = vin.slice(index + 1),
lchildvinlen = lchildvinarr.length,
rchildvinlen = rchildvinarr.length;
var lchildprearr = pre.slice(1, lchildvinlen + 1),
rchildprearr = pre.slice(lchildvinlen + 1);
t.val = rootnode;
t.left = new treenode();
t.right = new treenode();
if (t.val)
}createtree(t, pre, vin);
return t;
}var t = reconstructbinarytree(pre,vin);
部落格295 由先序遍歷結果和中序遍歷結果建立樹
內容 根據先序遍歷和中序遍歷結果來建立一棵樹 思路 1 每次遞迴建立樹的左右子樹 2 由先序遍歷的第乙個資料就是根節點,然後這個節點在中序遍歷的位置的左邊為樹的左子樹成員,右邊為右子樹成員 由此可以劃分樹的左右子樹部分,進行遞迴處理 先序中序建樹 include include include in...
由先序遍歷和中序遍歷生成二叉樹
生成演算法是遞迴的,對於先序序列來講,第乙個元素就是當前子樹的根節點,對於中序序列來講,每乙個中序序列都會被分割為兩個部分,這兩個部分就是下一次的要構造的子樹,所以說生成子樹的過程是自頂向下的 public class gentree string rootdata pre 0 string lef...
樹的遍歷 先序遍歷 中序遍歷 後序遍歷
名詞解釋 1 每個元素稱為節點 2 有乙個特定的節點被稱為根節點或樹根 3 除根節點外的其餘資料元素被分為m個互不相交的集合t1,t2,t3.tm 1,其中每乙個集合ti本身也是乙個樹,被稱作原樹的子樹 節點的度 乙個節點含有子樹的個數稱為該節點的度 葉節點或終端節點 度為0的節點稱為葉節點 非終端...