js 二叉树遍历
二叉树定义这里不再赘述。
我这里有个二叉树:
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" } } } };
1.使用前序遍历,并将所有name输出。
function getListWithDLR(node) { if(node){ console.log(node.name); getListWithDLR(node.left); getListWithDLR(node.right); } } getListWithDLR(tree); //调用函数,并把二叉树传进去。
2.使用中序遍历,并将所有name输出。
function getListWithLDR(node) { if(node){ getListWithLDR(node.left); console.log(node.name); getListWithLDR(node.right); } } getListWithLDR(tree);
3.使用后序遍历,并将所有name输出。
function getListWithLRD(node) { if(node){ getListWithLDR(node.left); getListWithLDR(node.right); console.log(node.name); } } getListWithLRD(tree);
原理:使用迭代。
4. 根据name找id。
function findIdByName(name,node) { if(node){ if (node.name === name) { console.log(node.id); } else { findIdByName(name, node.left); findIdByName(name, node.right); } } } findIdByName('Carl',tree);