binary tree
Posted arjenlee
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了binary tree相关的知识,希望对你有一定的参考价值。
中序线索化
二叉树节点定义:
class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; int isleftChild = 1;//0:线索 1:左孩子 int isrightChild = 1; public TreeNode(int val) { this.val = val; } }
在中序遍历的过程中完成线索化
//preNode始终指向中序序列中前一个访问的节点 private static TreeNode preNode = null;//只能用全局变量的形式来记录。 //curNode始终指向中序序列中当前访问的节点 public static TreeNode inIOrderThread(TreeNode curNode) { if (curNode == null) return null; //线索化左子树 InClueTree(curNode.left); //线索化当前节点 if (curNode.left == null) { curNode.isleftChild = 0; curNode.left = preNode; } if (preNode != null && preNode.right == null) { preNode.isrightChild = 0; preNode.right = curNode; } preNode = curNode;// //线索化右子树 InClueTree(curNode.right); return curNode; }
遍历中序线索二叉树
public static void inOrderThreadTravel(TreeNode root) { while (root != null) { System.out.print(root.val + " "); //存在线索,root的直接后继就是root.rigth; if (root.isrightChild == 0) { root = root.right; } //不存在线索的时候一定存在孩子节点,则root的直接后继就是其右子树的中序第一个元素。 else { root = root.right; while (root.left != null && root.isleftChild == 1) { root = root.left; } } } }
以上是关于binary tree的主要内容,如果未能解决你的问题,请参考以下文章
#Leetcode# 94. Binary Tree Inorder Traversal
LeetCode_Lowest Common Ancestor of a Binary Search Tree (Binary Tree)