二叉樹前序遍歷 leetcode114node
/** * Definition for a binary tree node. * function TreeNode(val) { * this.val = val; * this.left = this.right = null; * } */ /** * @param {TreeNode} root * @return {number[]} */ var preorderTraversal = function(root) { if(root){ return [root.val,...preorderTraversal(root.left),...preorderTraversal(root.right)] }else{ return [] } };
二叉樹中序遍歷 leetcode94數組
/** * Definition for a binary tree node. * function TreeNode(val) { * this.val = val; * this.left = this.right = null; * } */ /** * @param {TreeNode} root * @return {number[]} */ var arr=[]//結果 var inorderTraversal = function(root) { //遞歸終止條件 if(root==null) return arr if(root){ return [...inorderTraversal(root.left),root.val,...inorderTraversal(root.right)] } };
二叉樹後序遍歷 leetcode145函數
/** * Definition for a binary tree node. * function TreeNode(val) { * this.val = val; * this.left = this.right = null; * } */ /** * @param {TreeNode} root * @return {number[]} */ var postorderTraversal = function(root) { if(root==null) return[]; if(root) return [...postorderTraversal(root.left),...postorderTraversal(root.right),root.val] };
二叉樹層序遍歷(由上至下)leetcode102post
/** * Definition for a binary tree node. * function TreeNode(val) { * this.val = val; * this.left = this.right = null; * } */ /** * @param {TreeNode} root * @return {number[][]} */ var levelOrder = function(root) { if (!root) return [] let res = []//保存結果 let queue = [root] while (queue.length) { // 沒有節點在列,就是遍歷完畢 let subRes = [] const len = queue.length // 當前層的節點數目 for (let i = 0; i < len; i++) { // 遍歷當前層的節點 let cur = queue.shift() // 出列 subRes.push(cur.val) // 填充subRes數組 if (cur.left) queue.push(cur.left) // 下層節點入列 if (cur.right) queue.push(cur.right) } res.push(subRes) } return res };
二叉樹的層序遍歷(下至上)leetcode107this
/** * Definition for a binary tree node. * function TreeNode(val) { * this.val = val; * this.left = this.right = null; * } */ /** * @param {TreeNode} root * @return {number[][]} */ var levelOrder = function(root) { if (!root) return [] let res = []//保存結果 let queue = [root] while (queue.length) { // 沒有節點在列,就是遍歷完畢 let subRes = [] const len = queue.length // 當前層的節點數目 for (let i = 0; i < len; i++) { // 遍歷當前層的節點 let cur = queue.shift() // 出列 subRes.push(cur.val) // 填充subRes數組 if (cur.left) queue.push(cur.left) // 下層節點入列 if (cur.right) queue.push(cur.right) } res.push(subRes) } return res };
N插樹的前序遍歷 leetcode589code
/** * // Definition for a Node. * function Node(val, children) { * this.val = val; * this.children = children; * }; */ /** * @param {Node} root * @return {number[]} */ var preorder = function(root) { if(root==null) return []//判空 var childs=[]//結果集 recusion(root);//執行函數 return childs;//返回結果集 //函數定義 function recusion(root){ if(root==null) return var len=root.children.length childs.push(root.val) for(let i=0;i<len;i++){ recusion(root.children[i]) } } };
N插樹的後序遍歷 leetcode590遞歸
/** * // Definition for a Node. * function Node(val,children) { * this.val = val; * this.children = children; * }; */ /** * @param {Node} root * @return {number[]} */ var postorder = function(root) { if(root==null) return [] var res=[]//結果集 gets(root)//執行函數 return res//返回結果 //函數定義 function gets(root){ if(root==null) return var len=root.children.length//子節點數量 for(var i=0;i<len;i++){//遍歷子節點 gets(root.children[i])//深度 } res.push(root.val)//從葉子節點開始存儲 } };
N插樹的層序遍歷 leetcode429leetcode
/** * // Definition for a Node. * function Node(val,children) { * this.val = val; * this.children = children; * }; */ /** * @param {Node} root * @return {number[][]} */ var levelOrder = function(root) { if(root==null) return [] var res=[]//結果集 var queue=[root]//先放入樹的根節點 while(queue.length){ var subarr=[]//保存當前層的節點 const len=queue.length//當前層的長度 for(let i=0;i<len;i++){//只遍歷當前層 var curr=queue.shift()//出列 subarr.push(curr.val)//放進subarr if(curr.children!=null){//存在子節點 queue.push(...curr.children)//當前層的下一層節點 } } res.push(subarr) } return res };