LeetCode 数组转二叉树 C#

把LeetCode二叉树题目的测试数组,转换成二叉树

  1. class TreeNode {
  2. public int val;
  3. public TreeNode left;
  4. public TreeNode right;
  5. public TreeNode(int x) { val = x; }
  6. }
  7. class Tree {
  8. public static TreeNode CreateNode(int? val) {
  9. if (val == null) return null;
  10. return new TreeNode((int)val);
  11. }
  12. public static TreeNode CreateTree(int?[] arr) {
  13. if (arr.Length <= 0 || arr[0] == null) {
  14. return null;
  15. }
  16. TreeNode root = Tree.CreateNode(arr[0]);
  17. Queue<TreeNode> queue = new Queue<TreeNode>();
  18. queue.Enqueue(root);
  19. int index = 1;
  20. while (queue.Count > 0) {
  21. TreeNode node = queue.Dequeue();
  22. if (index < arr.Length) {
  23. node.left = Tree.CreateNode(arr[index++]);
  24. queue.Enqueue(node.left);
  25. }
  26. if (index < arr.Length) {
  27. node.right = Tree.CreateNode(arr[index++]);
  28. queue.Enqueue(node.right);
  29. }
  30. }
  31. return root;
  32. }
  33. public static void Walk(TreeNode node, Action<TreeNode> func, TreeWalkType type) {
  34. if (node != null) {
  35. if (type == TreeWalkType.Pre) func(node);
  36. Walk(node.left, func, type);
  37. if (type == TreeWalkType.In) func(node);
  38. Walk(node.right, func, type);
  39. if (type == TreeWalkType.Post) func(node);
  40. }
  41. }
  42. public static void InOrderTreeWalk(TreeNode root, Action<TreeNode> func) {
  43. if (root == null) {
  44. return;
  45. }
  46. Stack<TreeNode> stack = new Stack<TreeNode>();
  47. TreeNode current = root;
  48. while (current != null) {
  49. stack.Push(current);
  50. current = current.left;
  51. }
  52. while (stack.Count != 0) {
  53. current = stack.Pop();
  54. func(current); //func
  55. TreeNode node = current.right;
  56. while (node != null) {
  57. stack.Push(node);
  58. node = node.left;
  59. }
  60. }
  61. }
  62. }
  63. enum TreeWalkType {
  64. Pre,
  65. In,
  66. Post
  67. }

null

时间: 06-17

LeetCode 数组转二叉树 C#的相关文章

Leetcode:Path Sum 二叉树路径和

Path Sum: Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that adding up all the values along the path equals the given sum. For example:Given the below binary tree and sum = 22, 5 / 4 8 / / 11 13 4 / \ 7 2 1 return

做几个leetcode数组题二

1.Longest Consecutive Sequence Given an unsorted array of integers, find the length of the longest consecutive elements sequence. For example, Given [100, 4, 200, 1, 3, 2], The longest consecutive elements sequence is [1, 2, 3, 4]. Return its length:

LeetCode练习-求二叉树的深度-Maximu Depth of Binary Tree

题目大意: 很简单,只需要找出一颗二叉树的最大深度即可,貌似没有时间和空间的要求. 求解方法: 更简单,只需要按照宽度优先的方法去查找即可,在这里我用a队列保存待扩展的节点,用b来保存a扩展出来的节点,再利用t中间变量来交换a和b,直到a列队为空时,结束. 注意边界条件,root=NULL时,应该返回0. #include <iostream> #include <queue> using namespace std; //Definition for a binary tree

二叉树数组实现[C/C++]代码

二叉树数组表示1. [代码][C/C++]代码     01#include <stdio.h>0203/*04*  使用数组创建二叉树05*    1 初始化二叉树,btree[level] 初始化为006     2 level 标识二叉树的坐标07          左子树的坐标 level*208          右子树的坐标 level*2+109          从根节点开始,找到合适的位置,插入二叉树101112*/13create_tree(int *btree,int *

【数据算法】Java实现二叉树存储以及遍历

二叉树在java中我们使用数组的形式保存原数据,这个数组作为二叉树的数据来源,后续对数组中的数据进行节点化操作. 步骤就是原数据:数组 节点化数据:定义 Node节点对象 存储节点对象:通过LinkedList保存Node节点对象 在操作过程中我们需要将当前结点和前一节点.后一节点进行关系绑定 package tree; import java.util.LinkedList; import java.util.List; /** * 功能:把一个数组的值存入二叉树中,然后进行3种方式的遍历 *

数据结构学习笔记(树、二叉树)

树(一对多的数据结构) 树(Tree)是n(n>=0)个结点的有限集.n=0时称为空树.在任意一颗非空树种: (1)有且仅有一个特定的称为根(Root)的结点: (2)当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1.T2........Tn,其中每一个集合本身又是一棵树,并且称为根的子树. 对于树的定义还需要强调两点:1.n>0时根结点是唯一的,不可能存在多个根结点,数据结构中的树只能有一个根结点.2.m>0时,子树的个数没有限制,但它们一定是互不相交的. 结点

利用二叉树设计同学录管理系统

采用二叉树存储结构,利用预置数组建立二叉树:实现对通讯录的查找,基于查找实现对同学录的修改和新增成员:求所要操作节点的父节点,从而顺利地编写对同学录的删除操作. /*采用二叉树存储结构,利用预置数组建立二叉树:实现对通讯录的查找,基于查找实现对同学录的修改和新增成员:求所要操作节点的父节点,从而顺利地编写对同学录的删除操作.*/#include<stdio.h>#include<stdlib.h>#include<string.h>#define M 100#defin

Java数据结构-二叉树及其遍历

二叉树的定义:n(n>=0)个结点的有限集合,该集合或者为空集(称为空二叉树),或者由一个根结点和两棵互相不相交的.分别称为根结点的左子树和右子树的二叉树组成. 二叉树的特点: 0<=度<=2: 左右子树是有顺序的,不能颠倒: 不论有几棵子树,也要区分它是左子树还是右子树. 二叉树的五种基本形态: 空二叉树: 只有一个根结点: 根结点只有左子树: 根结点只有右子树: 根结点既有左子树又有右子树. 举例3个结点的二叉树的形态有: 下面说一些特殊的二叉树. 斜树:所有的结点都只有左子树的二叉

二叉树的存储表示与实现

二叉树的顺序存储 完全二叉树的存储可以按照从上到下,从左到右的顺序依次存储在一维数组中.完全二叉树的顺序存储如图所示:               如果按照从上到下,从左到右的顺序把非完全二叉树也同样的编号,将结点依次存放在一维数组中,为了能够正确反映二叉树中结点之间的逻辑关系,需要在一维数组中将二叉树中不存在的结点位置空出. 顺序存储对于完全二叉树来说是比较适合的,因为采用顺序存储能够节省内存单元,并能够利用公式得到每个结点的存储位置.但是,对于非完全二叉树来说,这种存储方式会浪费内存空间.