复制一棵二叉树
时间:2021-08-20
本文章向大家介绍复制一棵二叉树,主要包括复制一棵二叉树使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
/**
* 复制二叉树
* @param root
* @return
*/
public static TreeNode copyTree(TreeNode root){
TreeNode node = null;
if(root == null) return null;
node = new TreeNode(root.data);
node.leftChild = copyTree(root.leftChild);
node.rightChild = copyTree(root.rightChild);
return node;
}
测试是否复制成功:
复制成功的结果是根据两个树的层序遍历结果来判读是否复制成功
package treenode;
import java.util.*;
/**
* Created With IntelliJ IDEA.
* Descriptions:
* User:Mr.Du
* Date:2021/8/20
* Time:18:42
*/
public class CopyTreeNode {
public static void main(String[] args) {
int input = 0;
LinkedList<Integer> list = new LinkedList<>();
Scanner sc = new Scanner(System.in);
//当输入-1时,表示结束输入
while(sc.hasNextLine()){
if((input = sc.nextInt()) != -1){
list.add(input);
}else {
break;
}
}
TreeNode binaryTree = createBinaryTree(list);
System.out.println("层序遍历输出创建的二叉树");
List<List<Integer>> lists = levelOrder(binaryTree);
printTreeNode(lists);
System.out.println("========================");
//copy
TreeNode newTree = copyTree(binaryTree);
System.out.println("复制后输出新的二叉树 newTree :");
List<List<Integer>> newTreeList = levelOrder(newTree);
printTreeNode(newTreeList);
}
/**
* 创建二叉树
* @param list
* @return
*/
public static TreeNode createBinaryTree(LinkedList<Integer> list){
TreeNode node = null;
if(list == null || list.isEmpty()){
return null;
}
Integer data = list.removeFirst();
//0表示当前结点为空
if(data != 0){
node = new TreeNode(data);
node.leftChild = createBinaryTree(list);
node.rightChild = createBinaryTree(list);
}
return node;
}
/**
* 层序遍历,将每层结果放在一个集合,方便查看结果
* @param root
* @return
*/
public static List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> levels = new ArrayList<>();
if (root == null) return levels;
Queue<TreeNode> queue = new LinkedList<>();
queue.add(root);
int level = 0;
while ( !queue.isEmpty() ) {
// start the current level
levels.add(new ArrayList<>());
// number of elements in the current level
int level_length = queue.size();
for(int i = 0; i < level_length; ++i) {
TreeNode node = queue.remove();
// fulfill the current level
levels.get(level).add(node.data);
// add child nodes of the current level
// in the queue for the next level
if (node.leftChild != null) queue.add(node.leftChild);
if (node.rightChild != null) queue.add(node.rightChild);
}
// go to next level
level++;
}
return levels;
}
public static void printTreeNode(List<List<Integer>> list){
for(List l : list){
System.out.println(l);
}
}
}
结果如下:
原文地址:https://www.cnblogs.com/du001011/p/15168097.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Linux 查看历史命令并执行的方法
- 在 awk 中使用循环
- 移植busybox构建最小根文件系统的步骤详解
- Linux中的screen命令使用详解
- Mysql4种方式避免重复插入数据!
- 手撕RTSP协议系列(3)——sdp格式详解
- Linux tee命令使用详解
- 简单了解Linux性能监控命令free
- 在CentOS 8上安装htop的教程
- Ubuntu16.04.5LTS安装SVN的过程
- CentOS6.5与CentOS7 ssh修改默认端口号的方法
- CentOS8 配置本地yum源的详细教程
- linux查找大文件指定内容的实现方法
- linux服务器上安装jdk的两种方法(yum+下载包)
- ubuntu中编写shell脚本开机自动启动(推荐)