java实现树形数据结构删除_数据结构二叉树的java实现,包括二叉树的创建、搜索、删除和遍历...

1 packagecom.peter.java.dsa.common;2

3 importjava.util.ArrayList;4

5 public classBinaryTree {6 privateTreeNode root;7 private int size = 0;8

9 publicBinaryTree() {10 //TODO Auto-generated constructor stub

11 }12

13 public BinaryTree(intvalue) {14 //TODO Auto-generated constructor stub

15 this.root = newTreeNode(value);16 this.size = 1;17 }18

19 publicTreeNode getRoot() {20 returnroot;21 }22

23 public intgetMax() {24 TreeNode node =root;25 while (node.rightChildNode != null) {26 node =node.rightChildNode;27 }28 returnnode.value;29 }30

31 public intgetMin() {32 TreeNode node =root;33 while (node.leftChildNode != null) {34 node =node.leftChildNode;35 }36 returnnode.value;37 }38

39 public void preOrderTreeWalk(TreeNode node, ArrayListcontainer) {40 if (node != null) {41 container.add(node.value);42 preOrderTreeWalk(node.leftChildNode, container);43 preOrderTreeWalk(node.rightChildNode, container);44 }45 }46

47 public void midOrderTreeWalk(TreeNode node, ArrayListcontainer) {48 if (node != null) {49 midOrderTreeWalk(node.leftChildNode, container);50 container.add(node.value);51 midOrderTreeWalk(node.rightChildNode, container);52 }53 }54

55 public void postOrderTreeWalk(TreeNode node, ArrayListcontainer) {56 if (node != null) {57 postOrderTreeWalk(node.leftChildNode, container);58 postOrderTreeWalk(node.rightChildNode, container);59 container.add(node.value);60 }61 }62

63 public TreeNode search(intvalue) {64 TreeNode node =root;65 while (node.value !=value) {66 if (value

78 private TreeNode findParentNode(intvalue) {79 TreeNode parent = null;80 TreeNode node =root;81 while (node.value !=value) {82 parent =node;83 if (value

96 public void createBinaryTree(int[] data) {97 if (data != null) {98 for (inti : data) {99 insert(i);100 }101 }102 }103

104 public void insert(intvalue) {105 if (root == null) {106 root = newTreeNode(value);107 } else{108 TreeNode curNode =root;109 TreeNode parentNode;110 while (true) {111 parentNode =curNode;112 if (value

132 public boolean delete(intvalue) {133 boolean flag = false;134 TreeNode node =search(value);135 TreeNode parent =findParentNode(value);136 if (node != null) {137 if(node.equals(root)) {138 root = null;139 }140 if (node.leftChildNode == null && node.rightChildNode == null) {141 if (node.leftOrRight == 1) {142 node = null;143 parent.rightChildNode = null;144 }145 if (node.leftOrRight == -1) {146 node = null;147 parent.leftChildNode = null;148 }149 } else if (node.leftChildNode != null

150 && node.rightChildNode != null) {151 TreeNode successor =findSuccessor(node);152 if (node.leftOrRight == -1) {153 parent.leftChildNode =successor;154 parent.leftChildNode.leftOrRight = -1;155 }156 if (node.leftOrRight == 1) {157 parent.rightChildNode =successor;158 parent.rightChildNode.leftOrRight = 1;159 }160 successor.leftChildNode =node.leftChildNode;161 } else{162 if (node.leftChildNode != null) {163 if (node.leftOrRight == 1) {164 parent.rightChildNode =node.leftChildNode;165 }166 if (node.leftOrRight == -1) {167 parent.leftChildNode =node.leftChildNode;168 }169 }170 if (node.rightChildNode != null) {171 if (node.leftOrRight == 1) {172 parent.rightChildNode =node.rightChildNode;173 }174 if (node.leftOrRight == -1) {175 parent.leftChildNode =node.rightChildNode;176 }177 }178 node = null;179 }180 flag = true;181 --size;182 }183 returnflag;184 }185

186 privateTreeNode findSuccessor(TreeNode delNode) {187 TreeNode parent =delNode;188 TreeNode successor =delNode;189 TreeNode curNode =delNode.rightChildNode;190

191 while (curNode != null) {192 parent =successor;193 successor =curNode;194 curNode =curNode.leftChildNode;195 }196 if (!successor.equals(delNode.rightChildNode)) {197 parent.leftChildNode =successor.rightChildNode;198 successor.rightChildNode =delNode.rightChildNode;199 }200 returnsuccessor;201 }202

203 public intsize() {204 return this.size;205 }206

207 public booleanisEmpty() {208 //TODO Auto-generated method stub

209 return size == 0;210 }211

212 public classTreeNode {213 int leftOrRight = 0;//0: root;-1:left child node;1, right childe node;

214 Integer value;215 TreeNode leftChildNode;216 TreeNode rightChildNode;217

218 publicTreeNode(Integer value) {219 //TODO Auto-generated constructor stub

220 this.value =value;221 }222

223 @Override224 public booleanequals(Object obj) {225 //TODO Auto-generated method stub

226 if (obj instanceofTreeNode) {227 TreeNode node =(TreeNode) obj;228 return node.value == this.value;229 }230 return false;231 }232

233 @Override234 publicString toString() {235 return "TreeNode [leftOrRight="

236 +leftOrRight237 + ", value="

238 +value239 + (leftChildNode != null ? ", leftChildNode="

240 + leftChildNode : "")241 + (rightChildNode != null ? ", rightChildNode="

242 + rightChildNode : "") + "]";243 }244 }245 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值