二叉数实现方法 很绕的一个方法 递归

//构造类

package com.zw.binary;

public class BinaryTree {

private Node root;

public void add(int data){

if(root==null)

{

root=new Node(data);

}

else

{

root.add(data);

}

}

public void print(){

if(root!=null)

{

root.print();

}

}

//内部类

class  Node{

private int data;

private Node left;

private Node right;

public Node(int data) {

this.data = data;

}

public void add(int data){

if(this.data>data)

{

if(this.left==null)

{

this.left=new Node(data);

}

else

{

left.add(data);

}

}

else if(this.data<data){

if(this.right==null)

{

this.right=new Node(data);

}

else

{

right.add(data);

}

}

}

public void print(){

if(this.left!=null){

this.left.print();

}

System.out.print(this.data+" ");

if(this.right!=null){

this.right.print();

}

}

}

}

//测试类

package com.zw.binary;

public class BinaryTreeDemo {

/**

* @param args

*/

public static void main(String[] args) {

BinaryTree bt=new BinaryTree();

bt.add(8);

bt.add(3);

bt.add(1);

bt.add(6);

bt.add(14);

bt.add(4);

bt.add(10);

bt.add(7);

bt.add(13);

bt.print();

}

}

//输出结果

1 3 4 6 7 8 10 13 14

时间: 2024-12-17 07:53:19

二叉数实现方法 很绕的一个方法 递归的相关文章

二叉数的非递归遍历

本文借鉴于:http://www.cnblogs.com/dolphin0520/archive/2011/08/25/2153720.html 二叉树是一种非常重要的数据结构,很多其它数据结构都是基于二叉树的基础演变而来的.对于二叉树,有前序.中序以及后序三种遍历方法.因为树的定义本身就是递归定义,因此采用递归的方法去实现树的三种遍历不仅容易理解而且代码很简洁.而对于树的遍历若采用非递归的方法,就要采用栈去模拟实现.在三种遍历中,前序和中序遍历的非递归算法都很容易实现,非递归后序遍历实现起来相

二叉数的遍历

1 import java.util.LinkedList; 2 import java.util.List; 3 4 /** 5 * 功能:把一个数组的值存入二叉树中,然后进行3种方式的遍历 6 * 7 * 参考资料0:数据结构(C语言版)严蔚敏 8 * 9 * 参考资料1:http://zhidao.baidu.com/question/81938912.html 10 * 11 * 参考资料2:http://cslibrary.stanford.edu/110/BinaryTrees.ht

07_2.二叉数,二叉树的简单应用:表达式树

""" 二叉树的list实现 """ def BinTree(data, left=None, right=None): """ 二叉树 :param data: 根结点的元素 :param left: 左子树元素 :param right: 右子树元素 :return: """ return [data, left, right] def is_empty_BinTree(btree)

Path Sum 2 --java 二叉数 深度遍历,保存路径

在Path SUm 1中(http://www.cnblogs.com/hitkb/p/4242822.html) 我们采用栈的形式保存路径,每当找到符合的叶子节点,就将栈内元素输出.注意存在多条路径的情况. public List<List<Integer>> pathSum(TreeNode root, int sum) { List<List<Integer>>list=new ArrayList<>(); Stack<TreeNod

C++二叉搜索树(带父亲节点,2种节点删除方法的比较.)

这里写代码片#include <iostream> #include <iomanip> using namespace std; template<typename Type> class BSTNode { public: Type data; BSTNode<Type> *left; BSTNode<Type> *right; BSTNode<Type> *parent;//带父亲节点的搜索二叉树. BSTNode(Type d

使用非递归函数和递归函数分别实现二叉数的前序丶中序丶后序遍历

最近在复习二叉树的算法,所以对二叉树的遍历分别做了用两中不同方式来实现二叉树遍历 首先是先序遍历 1 /***********************先序遍历**************************/ 2 //先输出当前结点,再输出左结点,再输出右结点 3 4 /// <summary> 5 /// 使用非递归方式实现先序遍历 6 /// </summary> 7 /// <param name="head"></param>

3-1复习最短路径算法,3-2学习二叉数结构

第7章,神奇的树. 第一节,树的特点. 第二节,二叉树. 第三节,优先队列--堆(特殊的完全二叉树) 最小堆:All node-father smaller than node-sons 最大堆:相反. 原文地址:https://www.cnblogs.com/chentianwei/p/8492545.html

07_1.二叉数

- 在非空二叉树第i层中至多有2^i个结点(i>=0) 第0层至多有一个根结点 - 高度为h的二叉树至多有(2^(h+1))-1个结点(h>=0) 高度为0只有一个根结点 - 对于任何非空二叉树T,如果其叶结点的个数n0,度数为2的结点个数为n2,那么n0=n2+1 叶结点(没有子结点的结点),度数为2(有左右2个子树) - 满二叉树的叶结点比分支结点(度数不为0的结点)多一个 扩充二叉树: 扩充二叉树:对二叉树T,加入足够多的新叶结点,使T的原结点都变成度数为2的分支结点,得到的二叉树称为T

给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的&#160;key&#160;对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用

一般来说,删除节点可分为两个步骤: 首先找到需要删除的节点: 如果找到了,删除它. 说明: 要求算法时间复杂度为 O(h),h 为树的高度. 示例: root = [5,3,6,2,4,null,7] key = 3 5 / 3 6 / \ 2 4 7 给定需要删除的节点值是 3,所以我们首先找到 3 这个节点,然后删除它. 一个正确的答案是 [5,4,6,2,null,null,7], 如下图所示. 5 / 4 6 / 2 7 另一个正确答案是 [5,2,6,null,4,null,7]. 5