-
二叉树创建
2020-10-23 22:37:20创建二叉树 // 通过数组创建二叉树,0表示没有结点 TreeNode* createTreeByArr(int* arr, int len) { TreeNode* root= createTreeNode(arr[0]); createTreeByArr_main(arr, len, 1, root ,'l'); createTreeByArr...二叉树创建
// 通过数组创建二叉树,0表示没有结点 TreeNode* createTreeByArr(int* arr, int len) { TreeNode* root= createTreeNode(arr[0]); createTreeByArr_main(arr, len, 1, root ,'l'); createTreeByArr_main(arr, len, 2, root ,'r'); return root; } // 递归创建二叉树 void createTreeByArr_main(int* arr,int len , int i, TreeNode* parent, char RorL) { if(i >= len || arr[i]==0) { // 越界了或没有结点 return; } TreeNode* node = createTreeNode(arr[i]); if(RorL == 'r') { parent->rchild = node; } else { parent->lchild = node; } createTreeByArr_main(arr, len, 2*(i+1)-1, node, 'l'); createTreeByArr_main(arr, len, 2*(i+1), node, 'r'); }
-
根据二叉树创建字符串
2020-04-04 22:58:34根据二叉树创建字符串一、题目
你需要采用前序遍历的方式,将一个二叉树转换成一个由括号和整数组成的字符串。
空节点则用一对空括号 “()” 表示。而且你需要省略所有不影响字符串与原始二叉树之间的一对一映射关系的空括号对。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/construct-string-from-binary-tree
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。二、思路
进行前序遍历的过程中 添加一个字符串变量 sb,在递归遍历的开始和结束的时候添加上括号,左子树空,右子树不为空的情况下,要加上"()"占位,最后将得到的字符串中的开头和结尾的括号去掉。
三、代码
public class Solution { static class TreeNode { int val; TreeNode left; TreeNode right; public TreeNode(int val) { this.val = val; } } // 使用 sb 表示最终得到的字符串结果 // 递归过程中得到的局部结构都往 sb 中 追加即可 private StringBuilder sb = new StringBuilder(); public String tree2str(TreeNode t) { if (t == null){ // 此处返回的是一个空字符串,而不是 null return ""; } // 借助 helper 方法递归遍历 helper(t); // 递归得到的字符串最前面和最后面的括号是多余的 sb.deleteCharAt(0); sb.deleteCharAt(sb.length()-1); return sb.toString(); } private void helper(TreeNode t) { if (t == null){ return; } // 访问根节点,此处的访问操作追加字符串到sb中即可 sb.append("("); sb.append(t.val); helper(t.left); if (t.left == null && t.right != null){ // 左子树为空,右子树非空 // 一定 要加上一组()来占位 sb.append("()"); } helper(t.right); sb.append(")"); } }
-
二叉树创建字符串
2020-04-28 16:57:44二叉树创建字符串 你需要采用前序遍历的方式,将一个二叉树转换成一个由括号和整数组成的字符串。 空节点则用一对空括号 “()” 表示。 而且你需要省略所有不影响字符串与原始二叉树之间的一对一映射关系的空括号对...二叉树创建字符串
你需要采用前序遍历的方式,将一个二叉树转换成一个由括号和整数组成的字符串。
空节点则用一对空括号 “()” 表示。
而且你需要省略所有不影响字符串与原始二叉树之间的一对一映射关系的空括号对。示例 1:
输入: 二叉树: [1,2,3,4]
1 / \ 2 3 / 4
输出: “1(2(4))(3)”
解释: 原本将是“1(2(4)())(3())”,
在你省略所有不必要的空括号对之后,
它将是“1(2(4))(3)”。
*/public void tree2strChild(TreeNode2 t,StringBuilder sb) { if(t == null) { return; } sb.append(t.val); //左子树 if(t.left == null) {//左为空 if(t.right == null) { return;//左右都为空 }else{ sb.append("()");//左为空,右不为空 } }else{//左右都不为空 sb.append("("); tree2strChild(t.left,sb); sb.append(")"); } //右子树 //以上代码是递归前t的位置 if(t.right == null) { return; }else{ sb.append("("); tree2strChild(t.right,sb); sb.append(")"); } } public String tree2str(TreeNode2 t) { StringBuilder sb = new StringBuilder(); tree2strChild(t,sb); return sb.toString(); } }
-
二叉树创建以及遍历
2020-05-28 09:23:25二叉树创建以及遍历 题目描述 编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储)。 例如如下的先序遍历字符串: ABC##DE#G##F### 其中“#”表示的是空格,空格字符代表...二叉树创建以及遍历
题目描述
编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储)。 例如如下的先序遍历字符串: ABC##DE#G##F### 其中“#”表示的是空格,空格字符代表空树。建立起此二叉树以后,再对二叉树进行中序遍历,输出遍历结果。
输入描述 :
输入包括1行字符串,长度不超过100。
输出描述 :
可能有多组测试数据,对于每组数据,
输出将输入字符串建立二叉树后中序遍历的序列,每个字符后面都有一个空格。
每个输出结果占一行。
示例1
输入
复制
abc##de#g##f###
输出
复制
c b e g d f a
执行步骤:
1.先创建出一个二叉树
2.对二叉树进行中序遍历#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> typedef struct Node { struct Node* left; struct Node* right; char val; }Node; //创建二叉树 Node* creatTree(char* str, int* idx) { if (str[*idx] != '#'){ Node* root = (Node*)malloc(sizeof(struct Node)); root->val = str[*idx]; ++(*idx); root->left = creatTree(str, idx); ++(*idx); root->right = creatTree(str, idx); return root; } else { return NULL; } } //中序遍历 void inorder(Node*root){ if (root) { inorder(root->left); printf("%c ", root->val); inorder(root->right); } } int main() { char str[101] = { 0 }; scanf("%s", str); int idx = 0; Node* root = creatTree(str, &idx); inorder(root); printf("\n"); system("pause"); return 0; }
运行结果:
-
二叉树OJ题_二叉树的构建和遍历 + 根据二叉树创建子字符串
2019-09-21 18:01:541.二叉树的构建及遍历 2.根据二叉树创建字符串 -
二叉树及其应用--二叉树创建
2016-06-28 12:02:49给定二叉树的数据类型如下typedef char Element; struct Node { Element data; struct Node *lchild; struct Node *rchild; ...typedef struct Node * BTree;二叉树创建I 完成BTree Create_BTr -
算法-根据二叉树创建字符串
2020-05-05 20:06:22算法-根据二叉树创建字符串1、根据二叉树创建字符串 1、根据二叉树创建字符串 本题来源于:606. 根据二叉树创建字符串。是一个easy类型的题,但是却对我们掌握递归思想有很大的帮助。 有人说,理解递归,首先要理解... -
java二叉树创建以及遍历
2017-12-16 12:25:19最近要用java实现二叉树创建和遍历。不太喜欢那些网上代码。所以就自己结合书结合网上再结合一个人类的一点修改成功啦,细节很重要啊,差一点就是差很多。 实验要求: 1. 递归创建一棵二叉树; 2. 自定义一... -
二叉树创建C语言实现
2018-02-24 15:07:59通过链式存储结构实现二叉树的创建,包含如下操作: 1. 创建树; 2. 销毁树; 3. 清空树; 4. 插入结点; 5. 删除结点; 6. 获取结点; 7. 获取根结点; 8. 获取树的结点数; 9. 获取树的高度; 10. 获取树的度; 11... -
c++二叉树创建
2019-03-03 21:17:48先贴一个百度出来的二叉树的图 二叉树 就是首先得有一个根节点.这个节点的入度为0也就是它只有子节点没有父节点 如1号节点 每个节点又有一个左儿子和一个右儿子 当然也可以没有 接下来就是创建.创建一棵树... -
606. 根据二叉树创建字符串
2021-03-14 18:00:45606. 根据二叉树创建字符串 你需要采用前序遍历的方式,将一个二叉树转换成一个由括号和整数组成的字符串。 空节点则用一对空括号 “()” 表示。而且你需要省略所有不影响字符串与原始二叉树之间的一对一映射关系的... -
C++二叉树创建与遍历
2018-07-06 17:31:25注意:二叉树创建时要用指针的引用,详解参考:https://blog.csdn.net/cyzyfs/article/details/78991480https://bbs.csdn.net/topics/280005231#include <iostream> using namespace std; struct ... -
C语言二叉树创建(一定看的懂)
2018-06-02 14:01:36先贴一个百度出来的二叉树的图 二叉树 就是首先得有一个根节点.这个节点的入度为0也就是它只有子节点没有父节点 如1号节点 每个节点又有一个左儿子和一个右儿子 当然也可以没有 接下来就是创建.创建一... -
Java实现 LeetCode 606 根据二叉树创建字符串(遍历树)
2020-03-30 15:12:11606. 根据二叉树创建字符串 你需要采用前序遍历的方式,将一个二叉树转换成一个由括号和整数组成的字符串。 空节点则用一对空括号 “()” 表示。而且你需要省略所有不影响字符串与原始二叉树之间的一对一映射关系的... -
java二叉树创建
2019-09-24 13:18:51工具类包括创建,遍历等方法。定期更新。 关于输入,假如我的二叉树结构为,则输入的数据为1 2 0 0 3 0 0 。如果为,则输入数据为 1 2 3 0 0 0 4 0 5 0 0 ,其中空格应该为换行。采取的是先序输入。如果要改为中序... -
leetcode 606. 根据二叉树创建字符串
2020-04-20 17:02:32根据二叉树创建字符串 你需要采用前序遍历的方式,将一个二叉树转换成一个由括号和整数组成的字符串。 空节点则用一对空括号 “()” 表示。而且你需要省略所有不影响字符串与原始二叉树之间的一对一映射关系的空... -
二叉树(2)二叉树创建的3种方法,二叉树的递归遍历,二叉树的销毁
2014-09-03 11:34:001.二叉树创建的3种方法 在嵌套法创建二叉树的过程中,递归终止条件是十分重要设置的一环。节点数据是char类型的二叉树,嵌套创建时,很多人会用一个字符,比如输入流中的“ ”(空格)来设置递归结束。倘若节点数据...