package ch11;

import java.util.ArrayList;
import java.util.List;
import java.util.Stack; public class LinkBinTree <T>{ public static class TreeNode
{
Object data;
TreeNode left;
TreeNode right;
public TreeNode()
{ }
public TreeNode(Object data)
{
this.data = data;
left = null;
right = null;
}
public TreeNode(Object data,TreeNode left,TreeNode right)
{
this.data = data;
this.left = left;
this.right = right;
}
}
private TreeNode root;
public LinkBinTree()
{
this.root = new TreeNode();
}
//以指定根元素创建二叉树
public LinkBinTree(T data)
{
this.root = new TreeNode(data);
}
//为指定节点添加子节点
public TreeNode addNode(TreeNode parent, T data,boolean isLeft)
{
if(parent == null)
throw new RuntimeException("节点为null,无法添加子节点");
if(isLeft && parent.left != null)
throw new RuntimeException(parent+"节点已经有左子节点,无法添加左子节点");
if(!isLeft && parent.right!=null)
throw new RuntimeException(parent+"节点已经有右子节点,无法添加右子节点");
TreeNode newNode = new TreeNode(data);
if(isLeft)
parent.left = newNode;
else
parent.right = newNode;
return newNode;
}
//判空
public boolean empty()
{
return root.data ==null;
}
//返回固定节点的左子节点
public T leftChild(TreeNode parent)
{
if(parent ==null)
throw new RuntimeException("节点为Null,没有子节点");
return parent.left == null?null:(T)parent.left.data;
}
public T rightChild(TreeNode parent)
{
if(parent ==null)
throw new RuntimeException("节点为Null,没有子节点");
return parent.right == null?null:(T)parent.right.data;
} public TreeNode root()
{
if(empty())
throw new RuntimeException("树为空,无法访问根节点");
return root;
}
public T parent(TreeNode node)
{
return null;
}
//递归,每棵子树的额深度为其所有子树的最大深度+1
public int deep(TreeNode node)
{
if(node == null)
return 0;
else{
int leftDeep = deep(node.left);
int rightDeep = deep(node.right);
int max = leftDeep>rightDeep?leftDeep:rightDeep;
return max+1;
}
} //先序遍历二叉树
public List<TreeNode> preIterator()
{
return preIterator(root);
}
public List<TreeNode> preIterator(TreeNode node)
{
List<TreeNode> list = new ArrayList<TreeNode>();
//处理根节点
list.add(node);
if(node.left!=null)
list.addAll(preIterator(node.left));
if(node.right!=null)
list.addAll(preIterator(node.right));
return list;
} //中序遍历
public List<TreeNode> inIteratror()
{
return inIterator(root);
}
private List<TreeNode> inIterator(TreeNode node)
{
List<TreeNode> list = new ArrayList<TreeNode>();
if(node.left!= null)
list.addAll(inIterator(node.left));
list.add(node);
if(node.right!=null)
list.addAll(inIterator(node.right));
return list;
}
//非递归先序遍历二叉树
public List<TreeNode> nonCursivePreIterator(TreeNode node){
Stack<TreeNode>stack = new Stack<TreeNode> ();
List<TreeNode> list = new ArrayList<TreeNode>();
list.add(node);
while(node!=null || !stack.empty())
{
while(node!=null)
{
//System.out.println(node.data);
list.add(node);
stack.push(node);
node=node.left;
}
if(!stack.empty())
{
node = stack.pop();
node = node.right;
}
}
return list; }
}

LinkBinTree的更多相关文章

随机推荐

  1. vue配置请求拦截器和响应拦截器

    首先确保我们已经设置的store.js进行值的存取,这时候我们需要配置请求和响应的拦截器设置 main.js import Vue from 'vue' import App from './App' ...

  2. Unity——技能系统(三)

    Unity技能系统(三) Unity技能系统(一) Unity技能系统(二) Demo展示 六.Buff系统 buff分为增益和减益buff,应该区分开来: /// <summary> / ...

  3. [第二章]c++学习笔记5(类型转换构造函数)

    使用例 析构函数 使用例 析构函数和数组 delete运算符导致析构函数的调用

  4. HCNP Routing&Switching之BGP团体属性和团体属性过滤器

    前文我们了解了BGP的路由过滤已经as-path过滤器的使用相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15542559.html:今天我们来聊一聊 ...

  5. java解析Excel日期格式转换问题

    Excel上传导入,Excel里面单元格是日期的会解析出来数字,比如2020-07-11会解析为44023解决方法一: Excel单元格格式设置为文本格式.解决方法二: 使用代码处理,把解析出来的44 ...

  6. Salesforce Consumer Goods Cloud 浅谈篇二之门店产品促销的配置

    本篇参考:https://documentation.b2c.commercecloud.salesforce.com/DOC1/index.jsp?topic=%2Fcom.demandware.d ...

  7. koa2使用ejs模板引擎

    在koa中使用ejs并不需要像在node中一样安装了还要引用,只需要npm了就行,同时还需要安装koa-views模块.如: const views = require('koa-views'); 对 ...

  8. [hdu6391]Lord Li's problem

    首先发现结果与需要改变的具体位置无关,只和需要改变的位置的个数有关,因此设f[i][j]表示选取了i个数字异或结果有j个1,只要分析接下来选择的数和这j个1有几个重合即可: 1. 三个数字全部重合,即 ...

  9. 查询多个count展示结果

    <select id="getCountByDISC" resultType="com.rm.algo.entity.AlgoResult"> SE ...

  10. [SQL]master..sysprocesses

    --https://docs.microsoft.com/zh-cn/sql/relational-databases/system-compatibility-views/sys-sysproces ...