前序遍历方式:根左右,所以我们遍历的时候每次拿的就是当前节点,然后去拿左子树,最后拿右子树。
export interface ITreeNode{
value:number
left:ITreeNode | null
right:ITreeNode | null
}
// 前序遍历:根左右
// 中序遍历:左根右
// 后序遍历:左右根
const bst:ITreeNode = {
value:5,
left:{
value:3,
left:{
value:2,
left:null,
right:null
},
right:{
value:4,
left:null,
right:null
}
},
right:{
value:7,
left:{
value:6,
left:null,
right:null
},
right:{
value:8,
left:null,
right:null
}
}
}
const arr:number[] = []
/**
* 前序遍历
* @param node
*/
function preOrderTraverse(node:ITreeNode | null){
if(node == null) return
arr.push(node.value)
preOrderTraverse(node.left)
preOrderTraverse(node.right)
}
// console.log('----------前序遍历---------')
// preOrderTraverse(arr)
/**
* 中序遍历
* @param node
* @returns
*/
function inOrderTraverse(node:ITreeNode | null){
if(node == null) return
inOrderTraverse(node.left)
arr.push(node.value)
inOrderTraverse(node.right)
}
// console.log('----------中序遍历---------');
// inOrderTraverse(arr)
/**
* 后序遍历
* @param node
* @returns
*/
function postOrderTraverse(node:ITreeNode | null){
if(node == null) return
postOrderTraverse(node.left)
postOrderTraverse(node.right)
arr.push(node.value)
}