終止遞歸
1. 實現目標:js 編寫遞歸方法 查找指定節點;
2. 需解決問題:找到所需節點后,遞歸不會終止,直到所有節點遍歷完成后才會停止,會消耗性能
3. 解決方案:優化遞歸方法,在找到所需節點后,直接終止遞歸
4. 代碼:
function TreeNode ( value, children = [ ] ) { this . value = value; this . children = children;
}
const root = new TreeNode ( 1 , [ new TreeNode ( 2 , [ new TreeNode ( 4 ) , new TreeNode ( 5 ) ] ) , new TreeNode ( 3 , [ new TreeNode ( 6 ) , new TreeNode ( 7 , [ new TreeNode ( 8 ) , new TreeNode ( 9 ) ] ) , ] ) ,
] ) ;
let result = null ;
function traverseTreeErr ( findVal, node = root ) { console. log ( "traverseTreeErr" , node) ; if ( node. value === findVal) { result = node; return ; } for ( let child of node. children) { traverseTreeErr ( findVal, child) ; }
}
traverseTreeErr ( 6 ) ;
console. log ( "traverseTreeErr.result" , result) ;
function traverseTree ( findVal, node = root ) { console. log ( "traverseTree" , node) ; if ( node. value === findVal) { return node; } for ( let child of node. children) { let result = traverseTree ( findVal, child) ; if ( result) { return result; } } return null ;
}
console. log ( "traverseTree.result" , traverseTree ( 6 ) ) ;
5. 效果圖: