树、二叉树、堆排序:
对于二叉树:
①、i 的子节点: 2i+1, 2i+2;
②、i 的父节点: (i-1)/2 。
先序:根、左、右
中序:左、根、右
后序:左、右、根
N个节点的完全二叉树:树的高度:log2(N)取下整+1。(PS:根节点为第1层)
#include<iostream>
using namespace std;
int length;
//先序
void preOrder(int arr[],int i){
if(i>=length) return;
cout<<arr[i]<<" ";//先输出根节点
preOrder(arr,i*2+1);//输出左子树
preOrder(arr,i*2+2);//输出右子树
}
//中序
void inOrder(int arr[],int i){
if(i>=length) return;
inOrder(arr,i*2+1);//递归输出左子树
cout<<arr[i]<<" ";//输出根节点
inOrder(arr,i*2+2);//递归输出右子树
}
int main(){
int arr[]={78,56,34,43,4,1,15,2,23};
length= 9;
preOrder(arr,0);
cout<<endl;
cout<<"========================"<<endl;
inOrder(arr,0);
return 0;
}
结果: