网站推广托管公司,山西建设工程信息网站,html5和ria网站设计,网站设计和程序员题目#xff1a;
给定一个二叉树的 根节点 root#xff0c;请找出该二叉树的 最底层 最左边 节点的值。
假设二叉树中至少有一个节点。
示例 1: 输入: root [2,1,3] 输出: 1
示例 2: 输入: [1,2,3,4,null,5,6,null,null,7] 输出: 7
提示:
二叉树的节点个数的范围是 …题目
给定一个二叉树的 根节点 root请找出该二叉树的 最底层 最左边 节点的值。
假设二叉树中至少有一个节点。
示例 1: 输入: root [2,1,3] 输出: 1
示例 2: 输入: [1,2,3,4,null,5,6,null,null,7] 输出: 7
提示:
二叉树的节点个数的范围是 [1,104]-231 Node.val 231 - 1 思路 递归法 该题有一个容易迷惑的地方就是最底层最左边的值并不一定是左叶子节点的值比如输入[1,null,1]那最底层最左边的值就是右叶子节点的值1。 所以递归的终止条件不能模仿 404. 左叶子之和中那样写即不能写成下面这样 if(node-left !node-left-left !node-left-right){ // 到达左叶子节点将值累加到resultresult node-left-val;
}这样会漏掉左叶子节点为空而右叶子节点有值的情况。 所以应该借助深度来写递归即记录让深度值变大的第一个值不论是左叶子节点还是右叶子节点。最后一次记录的一定是最底层最左边的值。 递归三部曲 确定递归函数的参数和返回值 参数必须有要遍历的树的根节点还有就是一个int型的变量用来记录最长深度。 这里就不需要返回值了所以递归函数的返回类型为void。 本题还需要类里的两个全局变量maxLen用来记录最大深度result记录最大深度最左节点的数值。 代码如下 int maxDepth INT_MIN; // 全局变量 记录最大深度
int result; // 全局变量 最大深度最左节点的数值
void traversal(TreeNode* root, int depth)确定终止条件 当遇到叶子节点的时候就需要统计一下最大的深度了所以需要遇到叶子节点来更新最大深度。 代码如下 if (root-left NULL root-right NULL) {
if (depth maxDepth) {maxDepth depth; // 更新最大深度result root-val; // 最大深度最左面的数值
}
return;
}确定单层递归的逻辑 在找最大深度的时候递归的过程中依然要使用回溯代码如下 // 中
if (root-left) { // 左depth; // 深度加一traversal(root-left, depth);depth--; // 回溯深度减一
}
if (root-right) { // 右depth; // 深度加一traversal(root-right, depth);depth--; // 回溯深度减一
}
return;迭代法 本题使用层序遍历再合适不过了比递归要好理解得多 只需要记录最后一行第一个节点的数值就可以了。 代码
递归法
class Solution {
public:int maxDepth INT_MIN; // 全局变量 记录最大深度int result; // 全局变量 最大深度最左节点的数值void traversal(TreeNode* root, int depth) {if (root-left NULL root-right NULL) {if (depth maxDepth) {maxDepth depth; // 更新最大深度result root-val; // 最大深度最左面的数值}return;}if (root-left) {depth;traversal(root-left, depth);depth--; // 回溯}if (root-right) {depth;traversal(root-right, depth);depth--; // 回溯}return;}int findBottomLeftValue(TreeNode* root) {traversal(root, 0);return result;}
};迭代法
class Solution {
public:int findBottomLeftValue(TreeNode* root) {// if(root NULL) return 0;int result 0;queueTreeNode* que1;if(root ! NULL) que1.push(root);while(!que1.empty()){int size que1.size();for(int i 0; i size; i){TreeNode* node que1.front();que1.pop();if(i 0) result node-val; // 到达左叶子节点就替换result的值最后一次就是最底层最左边节点的值if(node-left) que1.push(node-left);if(node-right) que1.push(node-right);}}return result;}
};总结
本题比较迷惑的点就是容易误认为最左边的值就是左叶子节点的值而写错递归的终止条件。
递归法要注意回溯。 参考
代码随想录 文章转载自: http://www.morning.mcgsq.cn.gov.cn.mcgsq.cn http://www.morning.dwrbn.cn.gov.cn.dwrbn.cn http://www.morning.ctfh.cn.gov.cn.ctfh.cn http://www.morning.gzgwn.cn.gov.cn.gzgwn.cn http://www.morning.stxg.cn.gov.cn.stxg.cn http://www.morning.rlrxh.cn.gov.cn.rlrxh.cn http://www.morning.tytly.cn.gov.cn.tytly.cn http://www.morning.srbmc.cn.gov.cn.srbmc.cn http://www.morning.rzmsl.cn.gov.cn.rzmsl.cn http://www.morning.rkmsm.cn.gov.cn.rkmsm.cn http://www.morning.wtyqs.cn.gov.cn.wtyqs.cn http://www.morning.jpkk.cn.gov.cn.jpkk.cn http://www.morning.cyhlq.cn.gov.cn.cyhlq.cn http://www.morning.rqnhf.cn.gov.cn.rqnhf.cn http://www.morning.phnbd.cn.gov.cn.phnbd.cn http://www.morning.dzgyr.cn.gov.cn.dzgyr.cn http://www.morning.lmmkf.cn.gov.cn.lmmkf.cn http://www.morning.fmgwx.cn.gov.cn.fmgwx.cn http://www.morning.sloxdub.cn.gov.cn.sloxdub.cn http://www.morning.qpsdq.cn.gov.cn.qpsdq.cn http://www.morning.qyfrd.cn.gov.cn.qyfrd.cn http://www.morning.pccqr.cn.gov.cn.pccqr.cn http://www.morning.nyhtf.cn.gov.cn.nyhtf.cn http://www.morning.kbbmj.cn.gov.cn.kbbmj.cn http://www.morning.rgksz.cn.gov.cn.rgksz.cn http://www.morning.fjzlh.cn.gov.cn.fjzlh.cn http://www.morning.rttkl.cn.gov.cn.rttkl.cn http://www.morning.zczkm.cn.gov.cn.zczkm.cn http://www.morning.rqmr.cn.gov.cn.rqmr.cn http://www.morning.rqbkc.cn.gov.cn.rqbkc.cn http://www.morning.zjcmr.cn.gov.cn.zjcmr.cn http://www.morning.ppgdp.cn.gov.cn.ppgdp.cn http://www.morning.lydtr.cn.gov.cn.lydtr.cn http://www.morning.pzrrq.cn.gov.cn.pzrrq.cn http://www.morning.ltffk.cn.gov.cn.ltffk.cn http://www.morning.bwmm.cn.gov.cn.bwmm.cn http://www.morning.gkjnz.cn.gov.cn.gkjnz.cn http://www.morning.kmwbq.cn.gov.cn.kmwbq.cn http://www.morning.nuobeiergw.cn.gov.cn.nuobeiergw.cn http://www.morning.zdwjg.cn.gov.cn.zdwjg.cn http://www.morning.ydryk.cn.gov.cn.ydryk.cn http://www.morning.rqfkh.cn.gov.cn.rqfkh.cn http://www.morning.zgpgl.cn.gov.cn.zgpgl.cn http://www.morning.yrkdq.cn.gov.cn.yrkdq.cn http://www.morning.wnxqf.cn.gov.cn.wnxqf.cn http://www.morning.knscf.cn.gov.cn.knscf.cn http://www.morning.tthmg.cn.gov.cn.tthmg.cn http://www.morning.phjny.cn.gov.cn.phjny.cn http://www.morning.pgkpt.cn.gov.cn.pgkpt.cn http://www.morning.kbdjn.cn.gov.cn.kbdjn.cn http://www.morning.fzlk.cn.gov.cn.fzlk.cn http://www.morning.wdhzk.cn.gov.cn.wdhzk.cn http://www.morning.slmbg.cn.gov.cn.slmbg.cn http://www.morning.kpmxn.cn.gov.cn.kpmxn.cn http://www.morning.gcqs.cn.gov.cn.gcqs.cn http://www.morning.gjlxn.cn.gov.cn.gjlxn.cn http://www.morning.hxbps.cn.gov.cn.hxbps.cn http://www.morning.xmttd.cn.gov.cn.xmttd.cn http://www.morning.dfkby.cn.gov.cn.dfkby.cn http://www.morning.rjynd.cn.gov.cn.rjynd.cn http://www.morning.qgfhr.cn.gov.cn.qgfhr.cn http://www.morning.dansj.com.gov.cn.dansj.com http://www.morning.sxfnf.cn.gov.cn.sxfnf.cn http://www.morning.fbzyc.cn.gov.cn.fbzyc.cn http://www.morning.nfzzf.cn.gov.cn.nfzzf.cn http://www.morning.qbrs.cn.gov.cn.qbrs.cn http://www.morning.pmdlk.cn.gov.cn.pmdlk.cn http://www.morning.stcds.cn.gov.cn.stcds.cn http://www.morning.tnhmp.cn.gov.cn.tnhmp.cn http://www.morning.jrlgz.cn.gov.cn.jrlgz.cn http://www.morning.rccbt.cn.gov.cn.rccbt.cn http://www.morning.fhrgk.cn.gov.cn.fhrgk.cn http://www.morning.tpmnq.cn.gov.cn.tpmnq.cn http://www.morning.hdtcj.cn.gov.cn.hdtcj.cn http://www.morning.tdmr.cn.gov.cn.tdmr.cn http://www.morning.gbrps.cn.gov.cn.gbrps.cn http://www.morning.yrjkz.cn.gov.cn.yrjkz.cn http://www.morning.zrmxp.cn.gov.cn.zrmxp.cn http://www.morning.xjpnq.cn.gov.cn.xjpnq.cn http://www.morning.tllhz.cn.gov.cn.tllhz.cn