原文摘自:https://blog.csdn.net/zsy_snake/article/details/80353336
二叉树遍历有三种遍历情况:前序遍历、中序遍历和后续遍历。
var tree = { "id": 0, "name": "root", "left": { "id": 1, "name": "Simon", "left": { "id": 3, "name": "Carl", "left": { "id": 7, "name": "Lee", "left": { "id": 11, "name": "Fate" } }, "right": { "id": 8, "name": "Annie", "left": { "id": 12, "name": "Saber" } } }, "right": { "id": 4, "name": "Tony", "left": { "id": 9, "name": "Candy" } } }, "right": { "id": 2, "name": "right", "left": { "id": 5, "name": "Carl", }, "right": { "id": 6, "name": "Carl", "right": { "id": 10, "name": "Kai" } } } }
// 前序遍历 function DLR(tree){ console.log(tree.name); if(tree.left){ DLR(tree.left); } if(tree.right){ DLR(tree.right); } } DLR(tree)
结果:
root--> Simon--> Carl--> Lee--> Fate--> Annie--> Saber--> Tony--> Candy--> right--> Carl--> Carl--> Kai
// 中序遍历 function LDR(tree){ if(tree.left){ LDR(tree.left); } console.log(tree.name,'中序遍历'); if(tree.right){ LDR(tree.right); } } LDR(tree)
结果:
Fate--> Lee--> Carl--> Saber--> Annie--> Simon--> Candy--> Tony--> root--> Carl--> right--> Carl--> Kai
// 后序遍历 function LRD(tree){ if(tree.left){ LRD(tree.left); } if(tree.right){ LRD(tree.right); } console.log(tree.name,'后续遍历'); } LRD(tree)
结果:
Fate--> Lee--> Saber--> Annie--> Carl--> Candy--> Tony--> Simon--> Carl--> Kai--> Carl--> right--> root