二叉树(一)---二叉树的三种创建方法

一、顺序存储利用满二叉树的性质,每层的节点数1,2,4,8......,所以一颗深度为i的二叉树最多只能包含2 (i) - 1 (i是以指数的形式求出来的,此处利用等比数列求和),因此需要设置一个相同长度的数组来存储这个二叉树,若是空出来的节点,则数组元素留空即可。参考代码:public class ArrayBinaryTree<T> { //使用数组来存储它的所有节点 pri...
摘要由CSDN通过智能技术生成

一、顺序存储
利用满二叉树的性质,每层的节点数1,2,4,8......,所以一颗深度为i的二叉树最多只能包含2 (i) - 1 (i是以指数的形式求出来的,此处利用等比数列求和),因此需要设置一个相同长度的数组来存储这个二叉树,若是空出来的节点,则数组元素留空即可。

参考代码:
public class ArrayBinaryTree<T> {

	//使用数组来存储它的所有节点
	private Object[] datas;
	private int DEFAULT_DEEP = 10;
	
	//记录该树的深度
	private int deep;
	private int arraySize;
	
	//默认的深度创建一个二叉树
	public ArrayBinaryTree(){
		this.deep = DEFAULT_DEEP;
		this.arraySize = (int)Math.pow(2, deep) - 1;//等比数列求和
		datas = new Object[arraySize];
	}
	
	//以指定深度创建一个二叉树
	public ArrayBinaryTree(int deep){
		this.deep = deep;
		this.arraySize = (int)Math.pow(2, deep) - 1;
		datas = new Object[arraySize];
	}
	
	//以指定深度和指定的创建一个二叉树
	public ArrayBinaryTree(int deep, T root){
		this.deep = deep;
		this.arraySize = (int)Math.pow(2, deep) - 1;
		datas = new Object[arraySize];
		datas[0] = root;
	}
	
	/**
	 * 为指定的节点添加子节点
	 * @param index 需要添加的子节点的父节点的索引
	 * @param data 新的节点的数据
	 * @param left 是否为左节点
	 */
	public void addNode(int index, T data, boolean left){

		if(datas[index] == null){
			throw new RuntimeException("空节点,无法添加!");
		}
		if(2 * index + 1 >= arraySize){
			throw new RuntimeException("底层已满,越界异常!");
		}
		if(left){
			datas[2 * index + 1] = data;
		}
		else{
			datas[2 * index + 2] = data;
		}
	}
	
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
创建二叉树并使用三种方法进行遍历的C语言代码如下: ```c #include <stdio.h> #include <.h> // 二叉树节点结构 struct Node { int data; struct Node* left; struct Node* right; }; // 创建新节点 struct Node* createNode(int data) { struct Node* newNode = (struct Node*)malloc(sizeof(struct Node)); newNode->data = data; newNode->left = NULL; newNode->right = NULL; return newNode; } // 将节点插入二叉树 struct Node* insertNode(struct Node* root, int data) { if (root == NULL) { root = createNode(data); } else if (data <= root->data) { root->left = insertNode(root->left, data); } else { root->right = insertNode(root->right, data); } return root; } // 先序遍历二叉树(根-左-右) void preorderTraversal(struct Node* root) { if (root == NULL) { return; } printf("%d ", root->data); preorderTraversal(root->left); preorderTraversal(root->right); } // 中序遍历二叉树(左-根-右) void inorderTraversal(struct Node* root) { if (root == NULL) { return; } inorderTraversal(root->left); printf("%d ", root->data); inorderTraversal(root->right); } // 后序遍历二叉树(左-右-根) void postorderTraversal(struct Node* root) { if (root == NULL) { return; } postorderTraversal(root->left); postorderTraversal(root->right); printf("%d ", root->data); } int main() { struct Node* root = NULL; root = insertNode(root, 5); root = insertNode(root, 3); root = insertNode(root, 7); root = insertNode(root, 1); root = insertNode(root, 4); root = insertNode(root, 6); root = insertNode(root, 8); printf("先序遍历结果:"); preorderTraversal(root); printf("\n"); printf("中序遍历结果:"); inorderTraversal(root); printf("\n"); printf("后序遍历结果:"); postorderTraversal(root); printf("\n"); return 0; } ``` 这段代码首先定义了二叉树节点的结构体,包含数据、左子节点和右子节点。然后通过 `createNode` 函数创建新节点,`insertNode` 函数将节点插入二叉树中。接下来,实现了三种遍历方法:先序遍历、中序遍历和后序遍历。最后在 `main` 函数中创建了一个二叉树,并对其进行了三种遍历操作,并输出结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值