• java建立二叉树,递归/非递归先序遍历,递归/非递归中序遍历,层次遍历


    import java.util.LinkedList;
    import java.util.Scanner;
    import java.util.Stack;
    
    //structure of binary tree
    class BiTree {
    	BiTree lchild;
    	BiTree rchild;
    	String data;
    }
    
    public class BiTreeTest {
    	static Scanner scanner = new Scanner(System.in);
    
    	// test case: a b c # # d e # g # # f # # #
    	static BiTree createBiTree(BiTree root) {
    		String data = scanner.next();
    		if (data.equals("#")) {
    			return null;
    		} else {
    			root = new BiTree();
    			root.data = data;
    			root.lchild = createBiTree(root.lchild);
    			root.rchild = createBiTree(root.rchild);
    			return root;
    		}
    	}
    
    	// preOrder recursive traverse
    	static void preOrderRecur(BiTree root) {
    		if (root != null) {
    			System.out.print(root.data + " ");
    			preOrderRecur(root.lchild);
    			preOrderRecur(root.rchild);
    		}
    	}
    
    	// inOrder recursive traverse
    	static void inOrderRecur(BiTree root) {
    		if (root != null) {
    			inOrderRecur(root.lchild);
    			System.out.print(root.data + " ");
    			inOrderRecur(root.rchild);
    		}
    	}
    
    	// preOrder in non-recursive
    	static void preOrder(BiTree root) {
    		Stack<BiTree> stack = new Stack<BiTree>();
    		BiTree cur;
    		stack.push(root);
    		while (!stack.empty()) {
    			while ((cur = stack.peek()) != null) {
    				System.out.print(cur.data + " ");
    				stack.push(cur.lchild);
    			}
    			cur = stack.pop();
    			if (!stack.empty() && (cur = stack.pop()) != null) {
    				stack.push(cur.rchild);
    			}
    		}
    	}
    
    	// inOrder in non-recursive
    	static void inOrder(BiTree root) {
    		Stack<BiTree> stack = new Stack<BiTree>();
    		BiTree cur;
    		stack.push(root);
    		while (!stack.empty()) {
    			while ((cur = stack.peek()) != null) {
    				stack.push(cur.lchild);
    			}
    			stack.pop();
    			if (!stack.empty() && (cur = stack.pop()) != null) {
    				System.out.print(cur.data + " ");
    				stack.push(cur.rchild);
    			}
    		}
    	}
    
    	// level traverse,use LinkedList instead of queue data structure
    	static void levelTraverse(BiTree root) {
    		LinkedList<BiTree> list = new LinkedList<BiTree>();
    		BiTree cur;
    		list.add(root);
    		while (list.size() != 0) {
    			cur = list.removeFirst();
    			if (cur != null) {
    				System.out.print(cur.data + " ");
    			}
    			if (cur.lchild != null) {
    				list.add(cur.lchild);
    			}
    			if (cur.rchild != null) {
    				list.add(cur.rchild);
    			}
    		}
    	}
    
    	public static void main(String[] args) {
    		BiTree root = null;
    		root = createBiTree(root);
    		// preOrderRecur(root);
    		// inOrderRecur(root);
    		// inOrder(root);
    		levelTraverse(root);
    	}
    }


  • 相关阅读:
    【leetcode】Pascal's Triangle
    [bxd学习java基本点]10.set元素不重复,取元素顺序会变的。TreeSet取值时,是安顺序来的。
    cocos2dx 学习点滴(4) cocos2dx 架构和引擎目录
    VC 2008编译libxml22.7.6
    程序猿的九重天
    使用批处理文件设置环境变量
    删除指定目录下除开指定文件外所有文件的批处理命令
    关于永动机的思考
    程序员的九阳真经
    上帝的归上帝,程序的归程序 (卓有成效的程序员)
  • 原文地址:https://www.cnblogs.com/pangblog/p/3397948.html
Copyright © 2020-2023  润新知