编写一些高效率的函数,只使用指向二叉树,设计一个算法求出指定节点在二叉树中的层次
来和二叉树玩耍吧~
题目一
解法
/** *二叉树节点的定义。*公共类TreeNode { * int val * TreeNode left * TreeNode right * TreeNode(){ } * TreeNode(int val){ this。val=val} * TreeNode(int val,TreeNode left,TreeNode right){ * this。val=val* this . left=left * this . right=right * } * } */class解决方案{ public boolean是对称的(TreeNode根){ return方法(根。左边,根。对);}公共布尔值方法(TreeNode l,TreeNode r){ if(l==nullr==null)返回trueif(l==nullr==nulll.val!=r.val返回错误的返回方法(左,右)方法(左右,右左);}}
题目二
解法
/** *二叉树节点的定义。*公共类TreeNode { * int val * TreeNode left * TreeNode right * TreeNode(){ } * TreeNode(int val){ this。val=val} * TreeNode(int val,TreeNode left,TreeNode right){ * this。val=val* this . left=left * this . right=right * } * } */class Solution { public TreeNode sortedarrayobst(int[]nums){ return method(nums,0,nums。长度-1);}公共TreeNode方法(int[] nums,int l,int r){ if(lr)返回nullint mid=l(r-l)/2;TreeNode root=new TreeNode(nums[mid]);root.left=method(nums,l,mid-1);root.right=method(nums,mid 1,r);返回根目录;}}
题目三
解法
/** *二叉树节点的定义。*公共类TreeNode { * int val * TreeNode left * TreeNode right * TreeNode(){ } * TreeNode(int val){ this。val=val} * TreeNode(int val,TreeNode left,TreeNode right){ * this。val=val* this . left=left * this . right=right * } * } */class解决方案{ public boolean is balanced(TreeNode root){ if(root==null)返回truereturn math。ABS(方法(根。左)-方法(根。右))=1是平衡的(根。左)是平衡的(根。对);}公共int方法(TreeNode root){ if(root==null)返回0;返回Math.max(method(root.left),method(root。右))1;}}
题目四
解法
/** *二叉树节点的定义。*公共类TreeNode { * int val * TreeNode left * TreeNode right * TreeNode(){ } * TreeNode(int val){ this。val=val} * TreeNode(int val,TreeNode left,TreeNode right){ * this。val=val* this . left=left * this . right=right * } * } */class Solution { public boolean hasPathSum(TreeNode root,int targetSum) { if(root==null)返回falseif(根。left==空根。right==null)返回target sum==root . val return hasPathSum(root . left,target sum-root。val) hasPathSum(root。对,目标和-根。val);}}
题目五
解法
/** *二叉树节点的定义。*公共类TreeNode { * int val * TreeNode left * TreeNode right * TreeNode(){ } * TreeNode(int val){ this。val=val} * TreeNode(int val,TreeNode left,TreeNode right){ * this。val=val* this . left=left * this . right=right * } * } */class解决方案{ public TreeNode invert tree(TreeNode root){ if(root==null返回nullTreeNode node=新的TreeNode(root。val);节点。右=反转树(根。左);节点。left=反转树(根。对);返回节点;}}到此这篇关于剑指提供之爪哇算法习题精讲二进制专题篇的文章就介绍到这了,更多相关爪哇二进制内容请搜索盛行信息技术以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行它!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。