- 确定构造二叉树的区间是左开右闭。结束条件为(begin >= end)。
617 合并二叉树
- 我自己建立了一棵二叉树,AC。第一次写忽略了一个节点为空是无法有左和右孩子,解决的办法是建立函数传递的四个地址值,如果为空赋值NULL,不为空赋值孩子节点,就通过了。
- 没想通为什么Carl的结束条件,他的似乎更简单。
TreeNode* mergeTrees(TreeNode* root1, TreeNode* root2) {
if(root1 == NULL && root2 == NULL) return NULL;
int sum = 0;
TreeNode* tmpL1, *tmpL2, *tmpR1, *tmpR2;
if(root1 && root2) {
sum = root1->val+root2->val;
tmpL1 = root1->left, tmpL2 = root2->left;
tmpR1 = root1->right, tmpR2 = root2->right;
}
else if(root1 && !root2) {
sum = root1->val;
tmpL1 = root1->left, tmpL2 = NULL;
tmpR1 = root1->right, tmpR2 = NULL;
}
else {
sum = root2->val;
tmpL1 = NULL, tmpL2 = root2->left;
tmpR1 = NULL, tmpR2 = root2->right;
}
TreeNode* root = new TreeNode(sum);
root->left = mergeTrees(tmpL1, tmpL2);
root->right = mergeTrees(tmpR1, tmpR2);
return root;
}
700 二叉搜索树中的搜索
- 前序遍历,找到返回当前节点。
- 如何在不使用数组的情况下判断是否是二叉搜索树:
- 建立一个最小值min:如果当前值小于min,返回false;
- 建立一个树的节点pre,初始值NULL,当pre==NULL时候,赋值给pre当前节点,pre = root。当pre != NULL时,pre是当前节点的前一个节点,判断pre->val和root->val的值的大小,按照二叉搜索树的要求应该i是小于,如果大于返回true,直到节点为空,返回NULL。