Skip to content

Commit f0fc3d1

Browse files
committed
修改了一下目录结构
1 parent 648bf7e commit f0fc3d1

File tree

3 files changed

+151
-0
lines changed

3 files changed

+151
-0
lines changed

Diff for: 剑指offer/Don‘t know.md

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
1. [不用加减乘除做加法](https://www.nowcoder.com/practice/59ac416b4b944300b617d4f7f111b215?tpId=13&tqId=11201&tPage=1&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking)
2+
2. [二叉树的镜像](https://www.nowcoder.com/practice/564f4c26aa584921bc75623e48ca3011?tpId=13&tqId=11171&tPage=1&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking)

Diff for: 剑指offer/不用加减乘除做加法.md

+46
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
### 题目描述
2+
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
3+
### 思路
4+
#### 加法
5+
1. 这个要用二进制来做。对于5 + 7 = 12
6+
2. 5表示成二进制为101
7+
7表示成二进制为111
8+
3. 两者亦或的二进制形式为010,正好对应12中的2
9+
两者相与的二进制形式为101,正好是5.通过与的性质,我们知道为1的地方都是需要进位的地方。左移一位,变为1010,正好是10
10+
4. 两者相加就是结果了
11+
5. 由于不能用+ - × /,所以,我们要一直循环,当进位为零时,另一个数就是最终结果了。
12+
13+
总结,对于加法,亦或保存的是没有进位的结果,与左移一位表示的是进位结果。
14+
减法也可以使用这个来做。
15+
### 代码
16+
递归
17+
```c++
18+
class Solution {
19+
public:
20+
int Add(int num1, int num2)
21+
{
22+
if(num2 == 0)
23+
return num1;
24+
int tmp1 = num1^num2;
25+
int tmp2 = (num1&num2)<<1;
26+
return Add(tmp1, tmp2);
27+
}
28+
};
29+
```
30+
非递归
31+
```c++
32+
class Solution {
33+
public:
34+
int Add(int num1, int num2)
35+
{
36+
while(num2 != 0)
37+
{
38+
int tmp1 = num1^num2;
39+
int tmp2 = (num1&num2)<<1;
40+
num1 = tmp1;
41+
num2 = tmp2;
42+
}
43+
return num1;
44+
}
45+
};
46+
```

Diff for: 剑指offer/二叉树的镜像.md

+103
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
### 题目描述
2+
操作给定的二叉树,将其变换为源二叉树的镜像。
3+
### 输入描述
4+
```
5+
二叉树的镜像定义:源二叉树
6+
8
7+
/ \
8+
6 10
9+
/ \ / \
10+
5 7 9 11
11+
镜像二叉树
12+
8
13+
/ \
14+
10 6
15+
/ \ / \
16+
11 9 7 5
17+
```
18+
### 思路
19+
很简单,只要左右子树交换一下顺序就行了。
20+
### 代码
21+
递归形式
22+
```c++
23+
/*
24+
struct TreeNode {
25+
int val;
26+
struct TreeNode *left;
27+
struct TreeNode *right;
28+
TreeNode(int x) :
29+
val(x), left(NULL), right(NULL) {
30+
}
31+
};*/
32+
class Solution {
33+
public:
34+
void Mirror(TreeNode *pRoot) {
35+
if(pRoot == nullptr)
36+
return;
37+
swap(pRoot->left, pRoot->right);
38+
Mirror(pRoot->left);
39+
Mirror(pRoot->right);
40+
}
41+
};
42+
```
43+
非递归形式,借助栈或者队列暂存一下元素
44+
```c++
45+
/*
46+
struct TreeNode {
47+
int val;
48+
struct TreeNode *left;
49+
struct TreeNode *right;
50+
TreeNode(int x) :
51+
val(x), left(NULL), right(NULL) {
52+
}
53+
};*/
54+
class Solution {
55+
public:
56+
void Mirror(TreeNode *pRoot) {
57+
if(pRoot == nullptr)
58+
return;
59+
stack<TreeNode*> st;
60+
st.push(pRoot);
61+
while(st.size()){
62+
TreeNode *node = st.top();
63+
st.pop();
64+
if(node->left || node -> right)
65+
swap(node->left, node->right);
66+
if(node->left)
67+
st.push(node->left);
68+
if(node->right)
69+
st.push(node->right);
70+
}
71+
}
72+
};
73+
```
74+
```c++
75+
/*
76+
struct TreeNode {
77+
int val;
78+
struct TreeNode *left;
79+
struct TreeNode *right;
80+
TreeNode(int x) :
81+
val(x), left(NULL), right(NULL) {
82+
}
83+
};*/
84+
class Solution {
85+
public:
86+
void Mirror(TreeNode *pRoot) {
87+
if(pRoot == nullptr)
88+
return;
89+
queue<TreeNode*> qu;
90+
qu.push(pRoot);
91+
while(qu.size()){
92+
TreeNode* node = qu.front();
93+
qu.pop();
94+
if(node->left || node->right)
95+
swap(node->left, node->right);
96+
if(node->left)
97+
qu.push(node->left);
98+
if(node->right)
99+
qu.push(node->right);
100+
}
101+
}
102+
};
103+
```

0 commit comments

Comments
 (0)