推導二叉樹的遍歷結果

2021-09-16 12:26:14 字數 2526 閱讀 4143

已知二叉樹的中序序列是abcdefg,後序序列是bdcafge,求前序序列。

二叉樹的後序序列是按照「左子樹」,「右子樹」,「根」的順序排列的,序列中最後乙個元素代表該二叉樹的根節點。

二叉樹的前序序列是按照「根」,「左子樹」,「右子樹」的順序排列的,序列中第乙個元素代表該二叉樹的根節點。故通過已知的後序序列可以發現根,作為前序序列的第乙個元素。

二叉樹的中序序列是按照「左子樹」,「根」,「右子樹」的順序排列的,根將左子樹的序列和右子樹的序列分割在左右兩邊。通過後序序列發現根,找到其在中序序列的位置,從而在中序序列中發現左子樹和右子樹並獲得它們的長度,最後在後序序列中找到對應的左子樹和右子樹的後序序列。

這樣求某二叉樹的前序序列,變成了求該二叉樹左子樹的前序序列和該二叉樹右子樹的前序序列。

一棵樹,先找到其根,將其壓入棧中,再將其分割成左右子樹,按左子樹,右子樹的順序,找子樹的根,將其壓入棧中,直到子樹不可分割,得到整棵樹的前序序列。

/**

* 返回二叉樹的前序序列

* @param inorder

* @param postorder

* @returns preorder

*/function findpreorder (inorder, postorder) else

}(inorder, postorder)

return preorder

// 返回前序序列

}let preorder = findpreorder(array.from('abcdefg'), array.from('bdcafge'))

console.log(preorder)

// [ 'e', 'a', 'c', 'b', 'd', 'g', 'f' ]

非遞迴解法和遞迴解法的思路相同,找到根,壓入棧,分割左右子樹,找到它們的根,壓入棧。

不同之處在於用inorderarr儲存待分割的樹的中序序列,用postorderarr儲存待分割的樹的後序序列。

const findpreorder = (inorder, postorder) =>  else 

} return preorder

// 返回前序序列

}let preorder = findpreorder(array.from('abcdefg'), array.from('bdcafge'))

console.log(preorder)

// [ 'e', 'a', 'c', 'b', 'd', 'g', 'f' ]

已知二叉樹的前序序列是eacbdgf,中序序列是abcdefg,求後序序列。

通過前序序列找到根,找到根在中序序列的位置,將樹分割成左右子樹,按照先右子樹再左子樹的順序找到子樹的根,直至子樹不可分割。先找到的根排在後找到的根的後面。

和推導前序序列,相比思路大致相同,實現細節上,找樹的根的方式不同,分割子樹的方式不同,儲存根的方式不同。

const findpostorder = (preorder, inorder) => else

}(preorder, inorder)

return postorder

// 返回後序序列

}let postorder = findpostorder(array.from('eacbdgf'), array.from('abcdefg'))

console.log(postorder)

// [ 'b', 'd', 'c', 'a', 'f', 'g', 'e' ]

非遞迴解法和遞迴解法的思路相同,找到根並儲存,分割左右子樹,找到它們的根並儲存。

不同之處在於用preorderarr儲存待分割的樹的前序序列,用inorderarr儲存待分割的樹的中序序列,且每次取最後乙個元素開始處理。

const findpostorder = (preorder, inorder) =>  else 

} return postorder

}console.log(findpostorder(array.from('eacbdgf'), array.from('abcdefg')))

// [ 'b', 'd', 'c', 'a', 'f', 'g', 'e' ]

那是不可能的!

已知前序序列abc,後序序列cba,求中序序列。

這是一道多解題。

推薦結合nodemon在node環境下學習演算法。

二叉樹遍歷 推導總結

第一次總結,個人淺見,望大牛們輕削,怕疼,呵呵 1.已知前序遍歷和中序遍歷序列,可以唯一確定一棵二叉樹。2.已知後序遍歷和中序遍歷序列,可以唯一確定一棵二叉樹。3.已知後續遍歷和前序遍歷序列,不能唯一確定一棵二叉樹。綜上 要想唯一確定乙個二叉樹,必須要有中序遍歷序列。遍歷規則 1 先序或者前序遍歷規...

二叉樹推導

3 二叉樹的推導 3.1 由前序中序推導 已知一棵二叉樹的前序序列和中序序列,構造該二叉樹的過程如下 根據前序序列的第乙個元素建立根結點 在中序序列中找到該元素,確定根結點的左右子樹的中序序列 在前序序列中確定左右子樹的前序序列 由左子樹的前序序列和中序序列建立左子樹 由右子樹的前序序列和中序序列建...

根據二叉樹遍歷結果反推樹

已知前序 中序遍歷,求後序遍歷 例 前序遍歷 gdafemhz 中序遍歷 adefghmz 根據前序遍歷的特點,我們知道根結點為g 觀察中序遍歷adefghmz。其中root節點g左側的adef必然是root的左子樹,g右側的hmz必然是root的右子樹。觀察左子樹adef,左子樹的中的根節點必然是...