-
复制二叉树
2020-08-01 18:35:39//算法5.4 复制二叉树 #include <iostream> using namespace std; //二叉树的二叉链表存储表示 typedef struct BiNode { char data; //结点数据域 struct BiNode *lchild, *rchild; //左右孩子指针 } ...//算法5.4 复制二叉树 #include <iostream> using namespace std; //二叉树的二叉链表存储表示 typedef struct BiNode { char data; //结点数据域 struct BiNode *lchild, *rchild; //左右孩子指针 } BiTNode, *BiTree; //用算法5.3建立二叉链表 void CreateBiTree(BiTree &T) { //按先序次序输入二叉树中结点的值(一个字符),创建二叉链表表示的二叉树T char ch; cin >> ch; if (ch == '#') T = NULL; //递归结束,建空树 else { T = new BiTNode; T->data = ch; //生成根结点 CreateBiTree(T->lchild); //递归创建左子树 CreateBiTree(T->rchild); //递归创建右子树 } //else } //CreateBiTree void Copy(BiTree T, BiTree &NewT) { if (T == NULL) { //如果是空树,递归结束 NewT = NULL; return; } else { NewT = new BiTNode; NewT->data = T->data; //复制根结点 Copy(T->lchild, NewT->lchild); //递归复制左子树 Copy(T->rchild, NewT->rchild); //递归复制右子树 } //else } //CopyBiTree //用算法5.1 中序遍历的递归算法 void InOrderTraverse(BiTree T) { //中序遍历二叉树T的递归算法 if (T) { InOrderTraverse(T->lchild); cout << T->data; InOrderTraverse(T->rchild); } } int main() { BiTree tree, new_tree; cout << "请输入建立二叉树的序列:\n"; CreateBiTree(tree); Copy(tree, new_tree); cout << "复制得到的新树的中序序列:\n"; InOrderTraverse(new_tree); cout << endl; }
运行结果:
-
复制二叉树python_python实现复制二叉树
2020-12-15 00:49:12python实现复制二叉树google笔试题题目描述:给定一个二叉树根结点,复制该树,返回新建树的根结点 。分析与解答:用给定的二叉树的根结点 root来构造新的二叉树的方法为:首先创建新的结点 dupTree,然后根据 root 结点...python实现复制二叉树
google笔试题
题目描述:
给定一个二叉树根结点,复制该树,返回新建树的根结点 。
分析与解答:
用给定的二叉树的根结点 root来构造新的二叉树的方法为:首先创建新的结点 dupTree,
然后根据 root 结点来构造 dupTree 结点( dupTree.data=root.data), 最后分别用 root 的左右子 树来构造 dupTree 的左右子树。 根据这个思路可以实现二叉树的复制,使用递归方式实现的 代码如下:
class BiTNode: def __init__(self): self.data=None self.lchild=None self.rchild=None def creatDupTree(root): if root==None: return None dupTree=BiTNode() dupTree.data=root.data dupTree.lchild=creatDupTree(root.lchild) dupTree.rchild=creatDupTree(root.rchild) return dupTree def printreemidorder(root): if root==None: return if root.lchild!=None: printreemidorder(root.lchild) print(root.data) if root.rchild!=None: printreemidorder(root.rchild) def constructTree(): root=BiTNode() node1=BiTNode() node2=BiTNode() node3=BiTNode() node4=BiTNode() root.data=6 node1.data=3 node2.data=-7 node3.data=-1 node4.data=9 root.lchild=node1 root.rchild=node2 node1.lchild=node3 node1.rchild=node4 node2.lchild=node2.rchild=node3.lchild=node3.rchild= node4.lchild=node4.rchild=None return root if __name__=='__main__': root1=constructTree() root2=creatDupTree(root1) print('原始二叉树中序遍历') printreemidorder(root1) print('n') print('新的二叉树中序遍历') printreemidorder(root2)
原始二叉树中序遍历 -1 3 9 6 -7 新的二叉树中序遍历 -1 3 9 6 -7
-
JAVA复制二叉树_使用预遍历在Java中复制二叉树 - java
2021-03-10 09:46:39我正在尝试使用预遍历遍历来复制二叉树,但是我被卡住了。由于我没有将任何值放入新树中,因此它们显然无法正确复制...public class Node{int key;String name;Node leftChild;Node rightChild;Node(int key, String...我正在尝试使用预遍历遍历来复制二叉树,但是我被卡住了。
由于我没有将任何值放入新树中,因此它们显然无法正确复制...
public class Node{
int key;
String name;
Node leftChild;
Node rightChild;
Node(int key, String name){
this.key = key;
this.name = name;
}
public class BinaryTree{
public Node root;
public void copyTree(Node focusNode){
if(focusNode != null){
Node copyNode = new Node(focusNode.key, focusNode.name);
//System.out.println(copyNode);
copyTree(focusNode.leftChild);
copyTree(focusNode.rightChild);
}
}
}
参考方案
这是一个解决方案。为了演示目的,我在toString()类中添加了Node方法。
class Node {
int key;
String name;
Node leftChild;
Node rightChild;
Node(int key, String name) {
this.key = key;
this.name = name;
}
public String toString() {
return "[" + key + "," + name + "]";
}
}
BinaryTree也作了轻微修改:
class BinaryTree {
public Node root;
public BinaryTree copyTree(Node focusNode) {
BinaryTree bt = new BinaryTree();
bt.root = preOrderCopy(focusNode);
return bt;
}
public static void preOrderPrint(BinaryTree t) {
preOrderPrint(t.root);
}
public static void preOrderPrint(Node n) {
if (n == null) {
// base case
return;
}
System.out.println(n);
preOrderPrint(n.leftChild);
preOrderPrint(n.rightChild);
}
private Node preOrderCopy(Node focusNode) {
if (focusNode == null) {
// base case
return null;
}
Node copy = new Node(focusNode.key, focusNode.name);
copy.leftChild = preOrderCopy(focusNode.leftChild);
copy.rightChild = preOrderCopy(focusNode.rightChild);
return copy;
}
}
为了测试代码,我根据Wikipedia page for Tree Traversal上显示的内容创建了一个BinaryTree。这是此示例中使用的树的图片:
此示例的正确预购遍历为:F, B, A, D, C, E, G, I, H。您可以使用以下代码来测试此实现:
public class NodeTest {
public static void main(String[] args) {
BinaryTree bt = new BinaryTree();
Node a = new Node(1, "A");
Node b = new Node(2, "B");
Node c = new Node(3, "C");
Node d = new Node(4, "D");
Node e = new Node(5, "E");
Node f = new Node(6, "F");
Node g = new Node(7, "G");
Node h = new Node(8, "H");
Node i = new Node(9, "I");
f.leftChild = b;
b.leftChild = a;
b.rightChild = d;
d.leftChild = c;
d.rightChild = e;
f.rightChild = g;
g.rightChild = i;
i.leftChild = h;
bt.root = f;
System.out.println("Print full tree:");
BinaryTree.preOrderPrint(bt.copyTree(f));
System.out.println("Only print f's left sub-tree:");
BinaryTree.preOrderPrint(bt.copyTree(f.leftChild));
}
}
运行上面的代码将产生以下输出:
Print full tree:
[6,F]
[2,B]
[1,A]
[4,D]
[3,C]
[5,E]
[7,G]
[9,I]
[8,H]
Only print f's left sub-tree:
[2,B]
[1,A]
[4,D]
[3,C]
[5,E]
Java-同步无助于互斥 - java
我有一个程序,其中Main类将创建几个Node类资源,其中包含一个可运行线程,该线程在创建Node类资源时执行。我有一个Receive类使用的共享资源Node类。但是当几个Node资源从Resource类到达同步方法rcv()时,程序没有考虑互斥,并且输出是来自不同Node类不同部分的汞合金public class Main { //field //meth…Java Double与BigDecimal - java
我正在查看一些使用双精度变量来存储(360-359.9998779296875)结果为0.0001220703125的代码。 double变量将其存储为-1.220703125E-4。当我使用BigDecimal时,其存储为0.0001220703125。为什么将它双重存储为-1.220703125E-4? 参考方案 我不会在这里提及精度问题,而只会提及数字…java:继承 - java
有哪些替代继承的方法? java大神给出的解决方案 有效的Java:偏重于继承而不是继承。 (这实际上也来自“四人帮”)。他提出的理由是,如果扩展类未明确设计为继承,则继承会引起很多不正常的副作用。例如,对super.someMethod()的任何调用都可以引导您通过未知代码的意外路径。取而代之的是,持有对本来应该扩展的类的引用,然后委托给它。这是与Eric…Java:BigInteger,如何通过OutputStream编写它 - java
我想将BigInteger写入文件。做这个的最好方式是什么。当然,我想从输入流中读取(使用程序,而不是人工)。我必须使用ObjectOutputStream还是有更好的方法?目的是使用尽可能少的字节。谢谢马丁 参考方案 Java序列化(ObjectOutputStream / ObjectInputStream)是将对象序列化为八位字节序列的一种通用方法。但…Java-如何将此字符串转换为日期? - java
我从服务器收到此消息,我不明白T和Z的含义,2012-08-24T09:59:59Z将此字符串转换为Date对象的正确SimpleDateFormat模式是什么? java大神给出的解决方案 这是ISO 8601标准。您可以使用SimpleDateFormat simpleFormat = new SimpleDateFormat("yyyy-MM…
-
python实现复制二叉树
2020-07-30 14:38:34python实现复制二叉树 google笔试题 题目描述: 给定一个二叉树根结点,复制该树,返回新建树的根结点 。 分析与解答: 用给定的二叉树的根结点 root来构造新的二叉树的方法为:首先创建新的结点 dupTree, 然后根据 ...python实现复制二叉树
google笔试题
题目描述:
给定一个二叉树根结点,复制该树,返回新建树的根结点 。
分析与解答:
用给定的二叉树的根结点 root来构造新的二叉树的方法为:首先创建新的结点 dupTree,
然后根据 root 结点来构造 dupTree 结点( dupTree.data=root.data), 最后分别用 root 的左右子 树来构造 dupTree 的左右子树。 根据这个思路可以实现二叉树的复制,使用递归方式实现的 代码如下:class BiTNode: def __init__(self): self.data=None self.lchild=None self.rchild=None def creatDupTree(root): if root==None: return None dupTree=BiTNode() dupTree.data=root.data dupTree.lchild=creatDupTree(root.lchild) dupTree.rchild=creatDupTree(root.rchild) return dupTree def printreemidorder(root): if root==None: return if root.lchild!=None: printreemidorder(root.lchild) print(root.data) if root.rchild!=None: printreemidorder(root.rchild) def constructTree(): root=BiTNode() node1=BiTNode() node2=BiTNode() node3=BiTNode() node4=BiTNode() root.data=6 node1.data=3 node2.data=-7 node3.data=-1 node4.data=9 root.lchild=node1 root.rchild=node2 node1.lchild=node3 node1.rchild=node4 node2.lchild=node2.rchild=node3.lchild=node3.rchild=\ node4.lchild=node4.rchild=None return root if __name__=='__main__': root1=constructTree() root2=creatDupTree(root1) print('原始二叉树中序遍历') printreemidorder(root1) print('\n') print('新的二叉树中序遍历') printreemidorder(root2)
原始二叉树中序遍历 -1 3 9 6 -7 新的二叉树中序遍历 -1 3 9 6 -7
-
数据结构-二叉树(复制二叉树的递归算法)
2020-02-22 21:27:22文章目录思路Java 实现 思路 Java 对象满足深拷贝,直接赋值不就行了,为什么要复制呢? 确实,Java 的对象赋值满足深拷贝,类似 C 中的地址赋值,那这样直接 a=b 不...如何复制二叉树呢? 其实就是写一遍遍历而已 ... -
构建二叉树、输出二叉树、求树深、复制二叉树 (C语言)
2009-02-06 13:59:30构建二叉树、输出二叉树、求树深、复制二叉树 前序遍历 -
二叉树的创建与遍历&二叉树的高度&二叉树每层结点个数&复制二叉树
2014-02-12 11:34:55总结:二叉树的创建与遍历&二叉树的高度&二叉树每层结点个数&复制二叉树 -
二叉树(二)——叶子节点数、节点数、深度、复制二叉树
2020-03-25 14:42:34复制二叉树 二叉树的深度 深度:根节点到叶子节点的最长路径(边的个数) 求二叉树的深度->左子树的深度与右子数的深度,最大的哪个 int calculate_depth(pBT pB) //计算深度 { int m, n; if(pB==NULL) { ... -
数据结构---复制二叉树
2019-05-24 09:53:27复制二叉树: 设指针t指向一颗链接表示的二叉树T,想要得到T的一个“备份”,则容易想到用先根,中根,或后序遍历二叉树的解决方案。考虑到在创建二叉树中的算法使用了先序遍历的思想,这里采取后序遍历的思想。 ... -
数据结构知识整理 - 建立二叉链表、复制二叉树、计算二叉树深度、统计二叉树结点数
2018-12-22 14:28:33复制二叉树 计算二叉树深度 统计二叉树的结点个数 建立二叉链表 在先序遍历的递归算法中,将输出语句改为输入语句即可。(可回顾“递归算法”) 需要注意的是,递归算法会遍历满二叉树中的每一个结点,所以... -
复制二叉树(二叉树)
2013-11-02 20:10:41现输入其扩展二叉树的前序遍历序列,要求复制该二叉树,并对复制得来的二叉树进行中序遍历。 Input 第一行为一个整数n,表示以下有n组测试数据,每组测试数据占一行,为扩展二叉树的前序遍历序列。 ... -
java复制二叉树
2017-01-09 23:05:01* 深度复制一个二叉树。 给定一个二叉树,返回一个他的 克隆品 。 */package leetcode;import java.util.Scanner;public class n9cloneTree { public static void main(String[] args) { // TODO Auto-... -
Python程序员面试算法宝典---解题总结: 第三章 二叉树 3.9 如何复制二叉树
2019-06-13 21:57:08Python程序员面试算法宝典---解题总结: 第三章 二叉树 3.9 如何复制二叉树 题目: 给定一个二叉树根结点,复制该树,返回新建树的根结点 分析: 可以先复制根节点,然后复制左子树,复制右子树; 对于左子树,对左... -
C++ 复制二叉树
2020-01-04 16:56:37void CopyBiTree(TreeNode* root, TreeNode* newroot) // 复制二叉树 { if (root == nullptr) return; else { newroot->val = root->val; if (root->left != nullptr) newroot->left = new TreeNode(0); if ... -
复制二叉树python_二叉树的python实现
2020-12-11 10:15:20拽拽绅士6 '''78 importsys9 from _ast importWhile10 from celery.bin.celery importresult1112 '''顺序存储的二叉树实现(非完全存储)'''13 classnode... -
二叉树遍历算法的应用——复制二叉树
2018-09-03 22:07:21若二叉树不空,首先复制根节点,类似于先序遍历访问根节点的语句 递归复制左子树 递归复制右子树 void CopyTree(BiTree T,BiTree NewT) { if(T==NULL) { NewT = NULL; } else { BiTree NewT... -
数据结构-二叉树(复制二叉树的非递归算法)
2020-02-22 21:44:25遍历二叉树的非递归算法用到一个栈,而复制的话用到两个栈,一个存被复制的二叉树,一个存复制到的二叉树。新的二叉树永远跟着已经存在的二叉树的节奏走,已经存在的那颗二叉树找左结点,新的二叉树也找左结点,已经... -
用递归算法复制二叉树
2019-04-16 20:58:27最近做了一个简单的小问题如何复制一棵二叉树,自己在网上看了一些技术大佬写的总感觉写的有些复杂,所以自己尝试了一下。以想到关于二叉树的算法问题,我觉得我们就应该去思考用递归的思想去试一下。所以经过思考... -
JAVA复制二叉树_java实现二叉树的常见操作
2021-03-10 09:46:32树型结构是最常见的非线性结构,其中二叉树最为常见。今天我主要就是用java来实现一下树的一些常见操作。首先需要一个用来存储树节点值的javabean:publicclassTreeBean{privateintnodeValue;publicintgetNodeValue... -
Python算法——如何复制二叉树
2019-08-07 10:46:37复制一颗二叉树,先复制其根结点,再复制左子树,最后复制右子树,从而复制完成; 实现代码: # -*- coding:utf-8 -*- class BiTNode(): def __init__(self): self.data = None self.lchild = Non... -
JAVA复制二叉树_在java中迭代地销毁二叉树[复制]
2021-03-04 10:14:19这个问题在这里已有答案: 该任务通常在递归的邮件订单遍历期间完成,并且在线的示例很少 . 其中一个是here,但我想知道它是否正确,因为似乎_... } 如何迭代破坏二叉树?有人可以提供示例代码(java)吗?谢谢! -
二叉树5(复制二叉树)
2012-09-28 21:00:50# include # include typedef char ElemType; typedef struct BiTNode{ ElemType data; struct BiTNode* Lchild; struct BiTNode* Rchild;...//构造二叉树 void createbt(BiTree &T){ char c -
"如何复制二叉树"(python)
2019-03-16 18:59:22题目描述:给定一个二叉树根节点,复制该树,返回新建树的根节点。 分析与解答:用给定的二叉树的根节点root来...根据这个思路可以实现二叉树的复制,使用递归方式实现的代码如下: class BiTNode: def __init_...