构建二叉树(swift)

构建二叉树(swift)

public
class
ALTree<T: Comparable> {

var key :
T?

var left :
ALTree?

var right :
ALTree?

func addNode(key :
T) {

if (self.key
==
nil) {

self.key
= key

return

}

if (key <
self.key) {

if (self.left
!=
nil) {

left!.addNode(key)

}
else {

var leftChild :
ALTree =
ALTree()

leftChild.key
= key

self.left
= leftChild

}

}

if (key >
self.key) {

if (self.right
!=
nil) {

right!.addNode(key)

}
else {

var rightChild :
ALTree =
ALTree()

rightChild.key
= key

self.right
= rightChild

}

}

}

}

let
numberList :
Array<Int> = [8,2,10,9,11,1,7]

var
root =
ALTree<Int>()

for
number
in numberList {

root.addNode(number)

}

println(root)

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-30 04:37:07

构建二叉树(swift)的相关文章

(树)根据中序后序构建二叉树

题目:根据中序和后序遍历构建二叉树 思路:利用递归加上分治的思想.先找到根节点的值,然后在根据中序遍历找到根节点的左右两边的值,然后在递归的处理左右两边的左右子树.这里的关键在于怎么处理递归的左右子树的范围,代码里面详细解释 代码: class Solution { public: TreeNode *buildTree(vector<int> &inorder, vector<int> &postorder) { vector<int>::size_t

根据先序和中序序列构建二叉树

说明: 本次实验利用中序和先序序列,采用递归方式来构建二叉树 . 经过几天的失败和思考,我认为递归构建二叉树的过程中最重要的是递归单元,最麻烦的是递归参数的选择和传递. 简单将算法过程用如下流程图来表示:(本帖所用算法及图片均为原创内容,转贴注明出处) 算法:1.根据先序序列,建立根结点T 2.寻找中序序列的根结点位置,并据此位置计算左子树和右子树的区间 3.判断l_start和r_end是否相等,相等则表示只有一个根结点,设置其左右孩子结点为空并结束这一层:若不相等则继续下面步骤: 4.根据2

先序遍历和后序遍历构建二叉树

递归的方法利用先序遍历和中序遍历构建二叉树,同样也可以利用到中序遍历和后序遍历构建二叉树. //利用先序遍历和中序遍历构建二叉树 TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) { TreeNode *root=NULL; if(preorder.size()==0||inorder.size()==0||preorder.size()!=inorder.size()) return

Leetcode:Construct Binary Tree 前序和中序、后序和中序构建二叉树

前序和中序构建二叉树 后序和中序构建二叉树 分析:主要思路就是 在中序中找根节点然后划分左右子树,具体如下: 1. 查找根节点. 我们知道前序序列的第一个元素 和 后序序列的最后一个元素 肯定是根节点,我们就以此为突破口 2. 确定根节点的坐标. 我们在 中序序列中找到 根节点 的下标. 3. 分割左右子树. 对于中序序列:根节点下标之前的都属于左子树,之后的都属于右子树 对于先序序列:根节点之后的 一段元素(该段长度可以由中序序列的左子树长度确定)属于左子树,左子树之后的元素属于右子树 对于先

题目:1385 由前序和中序构建二叉树

http://ac.jobdu.com/problem.php?pid=1385 蛮怀旧的题目,记得大一就见过一直没做过,没难度,纯小心吧. 类似的是有中序和后续构建二叉树.比如http://www.cnblogs.com/kaituorensheng/p/3788533.html 思路很简单 递归构造: #include <cstdio> #include <cstring> #include <iostream> #include <cstdio> #i

剑指offer (6) 二叉树构建 二叉树遍历

前序和中序构建二叉树 后序和中序构建二叉树 二叉树遍历大总结: 先序.中序.后序 .层次 (递归.非递归.Morris)

通过输入字符串来构建二叉树

对二叉树的一系列操作都是建立在先将二叉树构造出来的前提上.大四考研的某天早上偷偷躲在宿舍敲二叉树的代码,也是醉醉的.学习就应该趁年轻,老了就学不动了. 首先是对二叉树的节点的一个声明: typedef struct BTree{ char str; struct BTree * lchild; struct BTree * rchild; }BTree; 然后我是打算用递归外加先序的方式对二叉树进行构建的,也就对输入字符串提出一个要求: printf("Please input the tree

Tree Recovery(由先、中序列构建二叉树)

题目来源: http://poj.org/problem?id=2255 题目描述: Description Little Valentine liked playing with binary trees very much. Her favorite game was constructing randomly looking binary trees with capital letters in the nodes. This is an example of one of her cr

利用层次遍历原理构建二叉树

层次遍历构建二叉树: 1.定义二叉树节点: 1 function TreeNode(val){ 2 this.val = val; 3 this.left = this.right = null; 4 } 2.层次遍历构建二叉树: 1 function createTree(arr){ 2 if(!arr||!arr.length)return null; 3 var root = new TreeNode(arr.shift()); 4 var list = [root]; 5 while(a