代码:
#include<iostream>
#include<stack>
using namespace std;
struct Treenode{
int value;
Treenode *left;
Treenode *right;
//构造函数
Treenode() :value(0),left(nullptr),right(nullptr){}
Treenode(int x):value(x),left(nullptr),right(nullptr){}
Treenode(int x,Treenode *left,Treenode *right):value(x),left(left),right(right){}
};
//二叉排序树中序遍历
int Ksmallest(Treenode *root,int k){
stack<Treenode*> s;
//二叉树节点和栈其中一个有效
while(root || !s.empty()){
if(root){
s.push(root);
root = root->left;
}else{
root = s.top();
s.pop();
if(--k == 0){
return root->value;//找到,直接返回
}
root = root->right;
}
}
return -1;
}
int main(){
//知识点 :new A() 返回值类型是 *A
Treenode* root =new Treenode(8);
root->left =new Treenode(5);
root->right = new Treenode(9);
root->left->left = new Treenode(3);
root->left->right = new Treenode(6);
root->left->left->left = new Treenode(1);
cout << Ksmallest(root, 4) << endl;
}
2.DP
#include <iostream>
#include <vector>
using namespace std;
int maxNumber(vector<vector<int>>& graph) {
int n = graph.size();
vector<vector<int>> dp(n, vector<int>(n,0));
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
dp[i][j] = graph[i][j];
}
}
//DP数组初始化
dp[0][0] = graph[0][0];
for (int i = 1; i < n; i++) {
dp[0][i] += dp[0][i-1];
dp[i][0] += dp[i-1][0];
}
for (int i = 1; i < n; i++) {
for (int j = 1; j < n; j++) {
dp[i][j] += max(dp[i-1][j], dp[i][j-1]);
}
}
return dp[n-1][n-1];
}
int main() {
//二维数组赋值,注意,不能直接赋值
int dp[3][3] = { {1, 5, 1}, {1, 6, 1}, {2, 3, 1} };
vector<vector<int>> matrix(3, vector<int>(3,0));
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
matrix[i][j] = dp[i][j];
}
}
cout << maxNumber(matrix) << endl;
return 0;
}
3.找到出现一次的那个数
直接用异或求解
int singleNumber(vector<int>& nums) {
int result = 0;
for (int i : nums) {
result ^= i;
}
return result;
}