第就章第21题(赶出来的作业) POWERBY KTL

本文介绍了一个简单的二叉树创建及左右子树交换算法,并通过中序遍历展示交换前后二叉树的变化。代码实现了二叉树节点结构定义、树的创建、子树交换功能以及遍历输出。

//第九章第21题,交换左右子树;
//输入参考书本p194,图9-8,输入为ABCDEFG@@@@L@@@#;中序遍历结果应该为DBEALFCG;
//交换左右子树后进行中序遍历的结果应为:GCFLAEBD;
//可以用别的二叉树进行验证;若程序出错的话可能是没有设置好maxsize的值;
#include "stdio.h"
#include "stdlib.h"
#include "conio.h"
#define maxsize 15  //若二叉树深度为n,则设置为2^n-1;

typedef char datatype;

typedef struct node
{
 datatype data;
 struct node *lchild,*rchild;
}bitree;

bitree *root;

bitree * CreatTree(void)
{
 char ch;
 bitree * Q[maxsize];
 int front,rear;
 bitree *root,*s;
 root=NULL;
 front=1;
 rear=0;
 printf("请输入字符构造二叉树,#结束,@表示虚结点./n");
 while((ch=getche())!='#')
 {
  s=NULL;
  if(ch!='@')
  {
   s=(bitree*)malloc(sizeof(bitree));
   s->data=ch;
   s->lchild=NULL;
   s->rchild=NULL;
  }
  rear++;
  Q[rear]=s;
  if(rear==1)
   root=s;
  else
  {
   if(s&&Q[front])
    if(rear%2==0)
     Q[front]->lchild=s;
    else
     Q[front]->rchild=s;
    if(rear%2==1)
     front++;
  }
 }
 printf("创建二叉树完成.../n");
 return root;
}

bitree* Exchange(bitree * p)  //该算法的主要思想是把递归函数看成一个黑盒,作用是
{         //遍历,参考中序遍历函数,只要把printf的函数替换为
 bitree *temp;     //交换的函数即可;

 if(p!=NULL)
 {
  temp=p->lchild;
  p->lchild=p->rchild;
  p->rchild=temp;
  Exchange(p->lchild);
  Exchange(p->rchild);
 } 
 return p;
}

void inorder(bitree *p)
{
 if(p!=NULL)
 {
  inorder(p->lchild);
  printf("%c",p->data);
  inorder(p->rchild);
 }
 return;
}

int main()
{
 root=CreatTree();
 printf("交换前的二叉树进行中序排列/n");
 inorder(root);
 root=Exchange(root);
 printf("交换后的二叉树进行中序排列/n");
 inorder(root);
 printf("程序结束.../n");
 return 0;
}

### 使用 Kettle 连接 Hive 数据库的方法 Kettle(现称为 Pentaho Data Integration,PDI)是一种强大的 ETL 工具,支持多种数据源的连接和操作。根据提供的引用内容[^2],Kettle 支持 Hadoop Hive 作为其数据源之一。以下是使用 Kettle 连接 Hive 数据库的具体方法和示例代码。 #### 1. 确保环境配置正确 在使用 Kettle 连接 Hive 数据库之前,需要确保以下条件已满足: - Hive 的 JDBC 驱动程序已安装并配置到 Kettle 的 `lib` 目录中。 - Hive 服务已启动,并可以通过网络访问。 - Kettle 版本与 Hive 版本兼容。例如,如果使用的是 Hive 2,则需要确保 Kettle 支持该版本[^1]。 #### 2. 配置 Hive 数据源 在 Kettle 中添加一个新的数据库连接: - 打开 Kettle 并进入“数据库连接”设置。 - 点击“新建”以创建一个新的数据库连接。 - 在“数据库类型”下拉菜单中选择 `Hive` 或 `Hive2`[^2]。 - 输入 Hive 数据库的相关信息,包括: - 主机名:Hive Server 的地址。 - 端口:默认为 10000(Hive 的默认端口号)。 - 数据库名称:目标数据库名称。 - 用户名和密码:用于连接 Hive 的认证信息。 #### 3. 示例代码 以下是一个通过 JDBC 连接 Hive 数据库的示例代码片段,适用于 Kettle 的脚本任务或外部 Java 程序: ```java import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; public class HiveConnectionExample { public static void main(String[] args) { String driverName = "org.apache.hive.jdbc.HiveDriver"; // Hive JDBC 驱动 String connectionUrl = "jdbc:hive2://<hive-host>:10000/<database-name>"; // 替换为实际值 String username = "<username>"; // 替换为实际用户名 String password = "<password>"; // 替换为实际密码 try { Class.forName(driverName); // 加载驱动 Connection connection = DriverManager.getConnection(connectionUrl, username, password); // 建立连接 Statement statement = connection.createStatement(); // 创建语句对象 ResultSet resultSet = statement.executeQuery("SELECT * FROM your_table LIMIT 10"); // 查询表数据 while (resultSet.next()) { // 遍历结果集 System.out.println(resultSet.getString(1)); // 输出第一列数据 } resultSet.close(); // 关闭结果集 statement.close(); // 关闭语句 connection.close(); // 关闭连接 } catch (Exception e) { e.printStackTrace(); } } } ``` 上述代码展示了如何通过 JDBC 连接到 Hive 数据库并执行简单的查询操作。此代码可以作为 Kettle 脚本任务的一部分运行。 #### 4. 数据抽取与转换 在完成 Hive 数据源的配置后,可以设计数据接口以实现数据抽取和转换[^3]。例如: - 定义数据抽取的方法:是全量抽取还是增量抽取? - 设置同步频率:如每天凌晨 1 点开始执行任务。 - 配置异常处理机制:如发生网络中断时重试 3 次。 #### 5. 测试连接 在 Kettle 中完成配置后,点击“测试连接”按钮以验证是否能够成功连接到 Hive 数据库。如果连接失败,请检查以下内容: - Hive JDBC 驱动是否正确安装。 - Hive Server 是否正常运行。 - 配置的主机名、端口、用户名和密码是否正确。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值