二叉树的基本操作
来源:互联网 发布:c语言中标识符怎么用 编辑:程序博客网 时间:2024/06/07 10:00
TreeNode 类
class TreeNode { int data; TreeNode leftNode; TreeNode rightNode; public TreeNode() { } public TreeNode(int data) { this.data = data; }}
1. 前序遍历(中左右)
/** * 前序遍历 * * @param root */ public static void preOrder(TreeNode root) { if (root == null) return; System.out.print(root.data + " "); preOrder(root.leftNode); preOrder(root.rightNode); }
2. 中序遍历(左中右)
/** * 中序遍历 * * @param root */ public static void inOrder(TreeNode root) { if (root == null) return; inOrder(root.leftNode); System.out.print(root.data + " "); inOrder(root.rightNode); }
3. 后序遍历(左右中)
/** * 后序遍历 * * @param root */ public static void postOrder(TreeNode root) { if (root == null) return; postOrder(root.leftNode); postOrder(root.rightNode); System.out.print(root.data + " "); }
4. 查找节点
/** * 查找节点 * * @param data * @param root * @return */ public static TreeNode findNode(int data, TreeNode root) { if (root == null) return null; TreeNode current = root; while (current.data != data) { if (data < current.data) { current = current.leftNode; } else { current = current.rightNode; } if (current == null) return null; } return current; }
5. 插入节点
/** * 插入节点 * * @param newNode * @param root */ public static void insertNode(TreeNode newNode, TreeNode root) { if (newNode == null) return; if (root == null) { root = newNode; return; } TreeNode current = root; while (true) { if (newNode.data < current.data) { if (current.leftNode == null) { current.leftNode = newNode; return; } current = current.leftNode; } else { if (current.rightNode == null) { current.rightNode = newNode; return; } current = current.rightNode; } } }
6. 删除节点
/** * 删除节点 * @param data * @param root * @return */ public static boolean deleteNode(int data, TreeNode root) { if (root == null) return false; TreeNode current = root; TreeNode parent = root; boolean isLeftChild = false; while (data != current.data) { parent = current; if (data < current.data) { isLeftChild = true; current = current.leftNode; } else { isLeftChild = false; current = current.rightNode; } if (current == null) return false; } if (current.leftNode == null && current.rightNode == null) { if (current == root) { root = null; return true; } else if (isLeftChild) { parent.leftNode = null; } else { parent.rightNode = null; } } else if (current.leftNode == null) { if (current == root) { root = root.rightNode; return true; } else if (isLeftChild) { parent.leftNode = current.rightNode; } else { parent.rightNode = current.rightNode; } } else if (current.rightNode == null) { if (current == root) { root = root.leftNode; } else if (isLeftChild) { parent.leftNode = current.leftNode; } else { parent.rightNode = current.rightNode; } } else { TreeNode successor = getSuccessor(current); if (current == root) { root = successor; }else if(isLeftChild){ parent.leftNode = successor; }else{ parent.rightNode = successor; } successor.leftNode = current.leftNode; } return true; } /** * 获取后继节点 * @param delNode * @return */ private static TreeNode getSuccessor(TreeNode delNode) { TreeNode successorParent = delNode; TreeNode successor = delNode; TreeNode current = delNode.rightNode; while (current != null) { successorParent = successor ; successor = current; current = current.leftNode; } if(successor != delNode.rightNode){ successorParent.leftNode = successor.rightNode; successor.rightNode = delNode.rightNode; } return successor; }
阅读全文
0 0
- 二叉树的基本操作
- 二叉树的基本操作
- 二叉树的基本操作
- 二叉树的基本操作
- 二叉树的基本操作
- 二叉树的基本操作
- 二叉树的基本操作
- 二叉树的基本操作
- 二叉树的基本操作
- 二叉树的基本操作
- 二叉树的基本操作
- 二叉树的基本操作
- 二叉树的基本操作
- 二叉树的基本操作
- 二叉树的基本操作
- 二叉树的基本操作
- 二叉树的基本操作
- 二叉树的基本操作
- C#学习笔记(三)—–C#高级特性中的委托与事件(上)
- Google官方资料 mksdcard
- chrome插件推荐
- Git、Maven、Gradle
- 二叉搜索树查找,插入,删除
- 二叉树的基本操作
- OllyDbg学习---深入理解消息驱动原理(2)
- AS JNI中C语言调Java方法签名
- IOS MVVM 设计模式
- tomcat 部署web项目的四种方法
- Android热修复(简单实现,秒懂)
- 输出1-100以内的素数
- 勒索病毒防范
- delphi工具栏按钮显示不完整,高度不能调整的原因