简介:
在计算机科学中,二叉树是每个结点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用于实现二叉查找树和二叉堆。
而然单链二叉树是指仅最左侧节点存在孩子节点,如下图所示。结果会导致二叉树很不平衡,但是实现比较简单。
C语法实现:
#include<bits/stdc++.h>
using namespace std;
typedef struct Node{
int data;
Node *parent;
Node *left, *right;
}*Tree;
void init_node(Tree &n){
n = new Node;
n->parent = NULL;
n->left = NULL;
n->right = NULL;
}
void init_tree(Tree &r){
init_node(r);
r->data = -1;
}
Tree insert_node(Tree &p, Tree &n){
Tree temp;
n->parent = p;
if(p->left){
p->right = n;
return p->left;
} else {
p->left = n;
return p;
}
}
Tree insert_num(Tree &p, int num){
Tree n;
init_node(n);
n->data = num;
return insert_node(p, n);
}
void print_tree_left(Tree &n){//递归版
if(n == NULL) return;
cout << n->data << endl;
print_tree_left(n->left);
}
void print_tree_right(Tree &n){
if(n->right == NULL) return;
cout << n->right->data << endl;
print_tree_right(n->left);
}
int main(){
Tree r, p;
init_tree(r);
p = r;
for(int i = 1; i < 10; i++){
p = insert_num(p, i);
}
print_tree_left(r);
print_tree_right(r);
return 0;
}
单链二叉树因为其节点插入的问题,导致数结构极不平衡,但是实现比较简单,因此可以作为向复杂树编码的过渡。
树的深度
int get_tree_height(Tree &n){//获得任意节点子树的高度
int height = 1;
for(Tree i = n->left; i; i = i->left)
height++;
return height;
}
树的遍历
void print_tree_interation_left(Tree &n){//迭代版
for(Tree i = n; i->left != NULL; i = i->left)
cout << i->left->data << endl;
}
void print_tree_interation_right(Tree &n){
for(Tree i = n; i->right != NULL; i = i->left)
cout << i->right->data << endl;
}