今天又是灰头土脸的一天,简单题我还思考很长时间构思
构思好写代码,咋说呢,思路还好,不算糟糕,但是写起代码来就很迷茫了
到最后又是bug改了一个又一个,希望我在慢慢进步吧,遇到不会写的题就看评论,
然后默写出来理解透彻,将知识“偷过来”
还是递归用的不熟,脑海中没有那种递归的想象
递归算法如果掌握好了是非常牛掰的啊
高手代码我只能说:太强了啊--对我这种小白来讲
希望过几十天或者几百天后的我重温这些随笔,可以笑出来,感慨现在的笨拙,而不是停留原地
冲冲冲!
20220306 22:48
kallengo!
/*
* 给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。
* 如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。
思路:
* 利用递归,同时遍历两个树,
* 如果他们的根的值不相等,返回false
* 如果他们同时有左子树,将左子树作为根节点,调用本方法
* 如果同时有右子树,将右子树作为根节点,调用本方法
* 如果同时没有子树,就判断当前结点是否相等,如果相等,返回true,否则返回false
*
* */
// public boolean isSameStructure(TreeNode p, TreeNode q, boolean flag) {
// if (!flag || p.val != q.val) {
// return false;
// }
// if (p.left != null && q.left != null) {
// flag = isSameStructure(p.left, q.left, true);
// } else if (p.right != null && q.right != null) {
// flag = isSameStructure(p.right, q.right, true);
// } else if (p.left != null || p.right != null || q.left != null || q.right != null) {
// flag = false;
// }
// return flag;
// }
/*糕手代码*/
public boolean isSameTree(TreeNode p, TreeNode q) {
/*如果都为空,说明之前的结点都对比成功了,返回true*/
if (p == null && q == null) {
return true;
}
/*如果两个节点当前都不为null,并且两个节点的值还都相等,
* 就继续往后遍历,三个条件缺一表示不相等,返回false
* */
if (p != null && q != null && p.val == q.val) {//点睛之处,看似很简单,但是直接就将正确的条件列出来
return isSameTree(p.left, q.left) && isSameTree(p.right, q.right);//这里我没有想到是直接调用左右结点
} else {
return false;
}
}