由于二叉树独特的树形结构,所以二叉树的很多操作都涉及到递归的方法,从一个根节点映射到很多子节点。
求二叉树的最大深度就是,遍历二叉树的左子树和右子树,找到根节点到某一叶子节点的最远距离。
var maxDepth=function(root){ if(root==null){ return 0; } return Math.max(maxDepth(root.left)),(maxDepth(root.right))+1; }
var minDepth=function(root){ if(!root){ return 0; } if(!root.left){ return 1+minDepth(root.right); } if(!root.right){ return 1+minDepth(root.left); } return Math.min(minDepth(root.left),minDepth(root.right))+1; }
左—根---右的顺序遍历:
var inOrder=function(root){ var arr=[]; function order(node){//定义遍历函数 if(node!=null){//根节点不为空 if(node.left!=null){//左节点不为空时 order(node.left);//将左节点作为新的根节点再调用遍历函数 } arr.push(node.val);//将当前根节点值放入数组 if(node.right!=null){//同上 order(node.right); } } } order(root);//调用遍历函数 return arr;//返回遍历的数组 };
左—右---根
var postorderTraversal = function(root) { var arr=[]; function order(node){ if(node!=null){ if(node.left!=null){ order(node.left); } if(node.right!=null){ order(node.right); } arr.push(node.val); } } order(root); return arr; };
根—左---右
var preorderTraversal = function(root) { var arr=[]; function order(node){ if(node!=null){ arr.push(node.val); if(node.left!=null){ order(node.left); } if(node.right!=null){ order(node.right); } } } order(root); return arr; };