公司网站建设费用包括,网站备案核实,网站营销的定义,建网站需要买什么文章目录 104.二叉树的最大深度100.相同的树965.单值二叉树 104.二叉树的最大深度 int maxDepth(struct TreeNode* root) {if(rootNULL)return 0;
int left1maxDepth(root-left);
int right1maxDepth(root-right);
return leftright?left:right;
}处理二叉树最大深… 文章目录 104.二叉树的最大深度100.相同的树965.单值二叉树 104.二叉树的最大深度 int maxDepth(struct TreeNode* root) {if(rootNULL)return 0;
int left1maxDepth(root-left);
int right1maxDepth(root-right);
return leftright?left:right;
}处理二叉树最大深度的问题时二叉树可以分为左子树右子树根。二叉树最大深度1max{左子树最大深度右子树最大深度}),1代表根。这样二叉树的最大深度就可以无限的递推下去直到左子树右子树都为空。所以边界问题就是当节点为空是返回0 if(rootNULL) return 0;。处理递归时核心是思考整棵树与其左右子树的关系而不是不停地想子问题的过程。子问题和原问题是相似的他们执行的代码也是相同的只要代码的边界条件和非边界条件的逻辑写对了就行了。 100.相同的树 bool isSameTree(struct TreeNode* p, struct TreeNode* q) {if(pNULLqNULL)return true;else if(pNULL||qNULL)return false;
else if(p-val!q-val)
return false;
elsereturn isSameTree(p-left,q-left)isSameTree(p-right,q-right);}比较两棵树是否相同时首先根节点必须是相同的然后就是看2棵左子树是否相同2棵右子树是否相同。所以要解决的子问题就是左边2棵子树是否相同右边2棵子树是否相同。那么边界条件是什么呢如果2棵树有一个是空的那么就无法递归了此时我们可以判断一下如果2个节点都是空就返回true否则返回false. 965.单值二叉树 bool isUnivalTree(struct TreeNode* root) {
if(rootNULL)
return true;
if(root-left!NULL)
{if(root-val!root-left-val||!isUnivalTree(root-left))return false;
}
if(root-right!NULL)
{if(root-val!root-right-val||!isUnivalTree(root-right))return false;
}
return true;
}这题我们像前面2题的思路看一看边界条件和子问题分别是什么呢。子问题就是左子树右子树里的值都要等于根节点的值边界条件就是递归到节点为空时返回true前面递归过程中如果左子树或右子树的值和根的值不相等或在左子树或右子树中存在不等的值时返回false