c++按照层次遍历顺序存放在数组的二叉树转换为按照二叉链表存储的二叉树

原文:点击这里

用递归方法将一个按照层次遍历顺序存放在数组的二叉树转换为按照二叉链表存储的二叉树。

在这里插入图片描述

#include<iostream>
#include<cstring>
char BT[] = "ABCD#EF";
int n = strlen(BT);
using namespace std;
typedef struct TNode{
    char data;
    TNode *lchild, *rchild;
    TNode(char d):data(d),lchild(NULL),rchild(NULL){}//构造函数
    ~TNode(){delete lchild;delete rchild;}
};
TNode * Ttransform(TNode*root,int k) {
	if(k>n||BT[k-1]=='#'){
		return NULL;
	}
	else{
		root=new TNode(BT[k-1]);
		root->lchild=Ttransform(root->lchild,2*k);
		root->rchild=Ttransform(root->rchild,2*k+1);
	}
	return root;
}
void inorder(TNode*root) {
	if(root!=NULL){
		inorder(root->lchild);
		cout<<root->data<<" ";
		inorder(root->rchild);
	}
}
int main(){
	TNode *root=new TNode('a');
	root=Ttransform(root,1);
	inorder(root);
	return 0;	
}

在这里插入图片描述

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是将按顺序方式存储数组中的二叉树转化为二叉链表形式的C++程序,其中会将数组中不足的节点补齐,使其成为满二叉树: ```c++ #include<iostream> #include<queue> using namespace std; struct TreeNode { char val; TreeNode* left; TreeNode* right; TreeNode(char x) : val(x), left(NULL), right(NULL) {} }; // 将按顺序方式存储数组中的二叉树转化为二叉链表形式 void convertArrayToLinkedList(TreeNode* root, char* arr, int index, int size) { if (index >= size) { return; } root = new TreeNode(arr[index]); convertArrayToLinkedList(root->left, arr, 2 * index + 1, size); convertArrayToLinkedList(root->right, arr, 2 * index + 2, size); } // 打印二叉链表 void printLinkedList(TreeNode* root) { while (root != NULL) { cout << root->val << " "; root = root->right; } cout << endl; } int main() { char arr[] = {'A', 'B', 'C', 'D', 'E', 'F', 'G'}; int size = sizeof(arr) / sizeof(char); // 将数组中不足的节点补齐,使其成为满二叉树 int fullSize = 1; while (fullSize < size) { fullSize *= 2; } char* fullArr = new char[fullSize]; for (int i = 0; i < fullSize; i++) { if (i < size) { fullArr[i] = arr[i]; } else { fullArr[i] = '#'; } } TreeNode* root = NULL; convertArrayToLinkedList(root, fullArr, 0, fullSize); printLinkedList(root); return 0; } ``` 该程序的思路是:首先将数组中不足的节点补齐,使其成为满二叉树,然后使用递归的方式对每个节点进行处理,将其转化为二叉链表的形式。最后,调用 `printLinkedList` 函数来打印转化后的二叉链表。请注意,这里的 `convertArrayToLinkedList` 函数使用的是指向指针的引用,因为需要对二叉树的节点进行修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值