首页 > 其他分享 >6.16后序线索二叉树

6.16后序线索二叉树

时间:2023-10-17 19:47:11浏览次数:34  
标签:right 后序 6.16 Trees 二叉树 null root public left

import java.util.Scanner;

public class Main {
public static int i = 0;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.next();
Trees root = AddTrees(str);//创建前序二叉树
root.zhongxv(root);//中序遍历
System.out.println();
midCodeTree m = new midCodeTree(root);
m.creatMidCodeTree(root);//中序线索链表
m.Inorder(root);//中序线索链表遍历
}

public static Trees AddTrees(String a) {
Trees T = null;
if (i < a.length()) {
if (a.charAt(i) != '#') {
T = new Trees(a.charAt(i));
i++;
T.left = AddTrees(a);
T.right = AddTrees(a);
} else {
i++;
}
}
return T;
}
}         class midCodeTree {
private Trees root;
private Trees pre = null;

public midCodeTree(Trees root) {
this.root = root;
}

public void creatMidCodeTree(Trees t) {//中序线索化
if (t == null) {
return;
}

creatMidCodeTree(t.left);

if (t.left == null) {
t.l = 1;
t.left = pre;
}

if (pre != null && pre.right == null) {
pre.r = 1;
pre.right = t;
}

pre = t;

creatMidCodeTree(t.right);
}


public Trees next(Trees p) {//找后继节点
Trees q = null;
if (p == null)
return null;
if (p.r == 1) {
q = p.right;
} else {
q = p.right;
while (q.l == 0) {
q = q.left;
}
}
return q;
}

public void Inorder(Trees root) {
if (root == null)
return;
Trees p = root;
while (p.l == 0) {
p = p.left;
}
System.out.println(p.data);
while (p.right != null) {
p = next(p);
System.out.println(p.data);
}
}
}                 class Trees {
public char data;
public Trees left;
public Trees right;
public int l;
public int r;

public Trees(char t) {
this.data = t;
this.left = null;
this.right = null;
l = 0;
r = 0;
}

public void zhongxv(Trees t) {
if (t != null) {
zhongxv(t.left);
System.out.print(t.data);
zhongxv(t.right);
}
}
}

标签:right,后序,6.16,Trees,二叉树,null,root,public,left
From: https://www.cnblogs.com/zhaoqianwan/p/17770485.html

相关文章

  • 144-18 中序创建线索二叉树
    同理,先序创建线索二叉树只需要将InThread中的某部分调换位置死记硬背#include<stdio.h>#include<stdlib.h>typedefstructnode{intdata;structnode*lchild,*rchild;intlefttag,righttag;}TreeNode,*Tree;voidCreateTree(Tree&T)//先序......
  • IDEA_多窗口_二叉树目录
    IDEAIDEA打开两个项目File——>Open/OpenRecent——>选择项目是替换目前正打开的项目窗口-ThisWindow/保留目前已打开的项目,重新打开一个新的窗口-NewWindowIDEA文件夹分支显示多个空文件夹创建时,内无文件的目录会叠加一起,点击设置按钮、TreeAppearance......
  • 二叉树遍历
    packagecom.exe4.offer;importjava.util.Stack;/***前序、中序、后序遍历方法*@authorWGS**/publicclassBianliOfBinarryTree{publicstaticclassTreeNode{intval=0;TreeNodeleft=null;TreeNoderight=null;......
  • 王道408---DS---树、二叉树、图
    有序树、无序树的概念有序树和无序树,树中结点的各子树从左到右是有次序的,不能互换,称该树为有序树,否则称为无序树。树/二叉树的性质树的性质常用的只有第一个二叉树的性质常用公式也只有这一个二叉树的存储一般分为顺序存储与链式存储要求顺序存储能默写顺序存储:typ......
  • HashMap-二叉树
        ......
  • LeetCode101.对称二叉树
    classSolution{//ArrayDeque不支持添加nullpublicbooleanisSymmetric(TreeNoderoot){returndfs(root.left,root.right);}//实际上,递归比较的就是根节点左右子树上,对称位置的节点booleandfs(TreeNodeleft,TreeNoderight){i......
  • HashMap-二叉树
        ......
  • 143-3 二叉树后序非递归遍历
    二叉树的后序非递归遍历使用辅助栈 r指针的作用是判断该结点是否遍历过#include<stdio.h>#include<stdlib.h>#defineMaxSize20typedefstructnode{intdata;structnode*lchild,*rchild;}TreeNode,*Tree;typedefTreeNode*Elem;typedefstruct{......
  • MySQL专题面试题-二叉树、红黑树、B 树、B+树
    演示网址:https://www.cs.usfca.edu/~galles/visualization/Algorithms.html所谓的索引,就是帮助MySQL高效获取数据的排好序的数据结构,基本都是按照k-v形式存储。1.二叉树 二叉树的每个节点至多只有2个叶子节点,且左边的叶子节点键值比根节点小,右边的叶子节点键值比根节点大。这......
  • 医院设置(二叉树)
    https://www.luogu.com.cn/problem/P1364这道题是个二叉树(为什么有人要去用dfs,bfs去做??(▔___▔))题目描述这道题让我们在这棵树上修建一家医院,而且让人们到医院的距离和最短,距离和也就是每一个点到医院的距离*这个点上有的人数(就这么简单)首先我们可以建一个结构体,里面存了每一个点......