1:二叉树的创建与赋值
(1):前言知识
- 这里的创建是利用层序序列进行创建,主要就是根节点的坐标为i 的话 那么左节点的坐标为 2i+1,右节点的坐标为2i+2;
- 开辟一个结构体
struct Node {
int val;
Node * left;
Node * right;
Node () : val(-1),left(NULL),right(NULL) {};
Node(int x) : val(x),left(NULL),right(NULL) {};
}node;
Node* node = new Node(3);
(2):代码演示
/**
思路:1.建树思路,我们是将要输入的数装进一个数组当中,如果某个结点是空结点的话,那就
将其 赋值位-1
2.我们创建一个函数,函数的返回类型为该树,函数的参数为数组和我们的数组下标
3.通过观察我们发现
一个数组的的根结点为 i 的话
那么的左孩子结点为:2*i+1; 右孩子结点为:2*i+2;
*/
#include<bits/stdc++.h>
using namespace std;
//typedef struct Node* TreeNode;
struct Node {
int val;
Node* left;
Node* right;
Node(): val(-1),left(NULL),right(NULL){};
Node(int x) : val(x),left(NULL),right(NULL){};
};
//根据层序序列进行输入
Node* createNode(vector<int>& v,int index) {
if(index > v.size()-1) return NULL;
Node* node = new Node(v[index]);
// node->val = v[index];
node->left = createNode(v,index*2+1);
node->right = createNode(v,index*2+2);
return node;
}
void preorder(Node* root) {
if(root == NULL) return ;
cout << root->val<< ' ';
if(root->left != NULL) preorder(root->left);
if(root->right != NULL) preorder(root->right);
}
int main() {
vector<int> v;
int n;
cin >> n;
for (int i = 0; i < n; i++) {
int nums;
cin >> nums;
v.push_back(nums);
}
Node* node;
node = createNode(v,0);
preorder(node);
}
/**
7
1 2 3 -1 4 5 -1
前序输出 1 2 -1 4 3 5 -1;
*/