1. 程式人生 > >連結串列六:二叉搜尋樹與雙向連結串列

連結串列六:二叉搜尋樹與雙向連結串列

/**
 * 題目:二叉搜尋樹與雙向連結串列
 * 描述:輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成一個排序的雙向連結串列。要求不能建立任何新的結點,只能調整樹中結點指標的指向
 * 方案:在中序遍歷中新增前驅結點
 * */

public class Six {

    /**
     * 前序遍歷
     * */
    public static void two(BinaryTreeNode node) {
        if (node == null) {
            return;
        }
        System.out.println(node.var);
        one(node.left);
        one(node.right);
    }
    
/** * 中序遍歷 * */ @SuppressWarnings("unused") public static void one(BinaryTreeNode node) { BinaryTreeNode head = null; BinaryTreeNode realhead = null; if (node == null) { return; } one(node.left); if(head == null) { head
= node; realhead = node; }else { head.right = node; node.left = head; head = node; } one(node.right); } /** * 後序遍歷 * */ public static void three(BinaryTreeNode node) { if (node == null) {
return; } one(node.left); one(node.right); System.out.println(node.var); } public static void main(String[] args) { BinaryTreeNode nodeRoot = new BinaryTreeNode(); nodeRoot.var = 10; BinaryTreeNode nodeOne = new BinaryTreeNode(); nodeOne.var = 6; BinaryTreeNode nodeTwo = new BinaryTreeNode(); nodeTwo.var = 4; BinaryTreeNode nodeThree = new BinaryTreeNode(); nodeThree.var = 8; BinaryTreeNode nodefour = new BinaryTreeNode(); nodefour.var = 14; BinaryTreeNode nodeFive = new BinaryTreeNode(); nodeFive.var = 12; BinaryTreeNode nodeSix = new BinaryTreeNode(); nodeSix.var = 16; nodeRoot.left = nodeOne; nodeRoot.right = nodefour; nodeOne.left = nodeTwo; nodeOne.right = nodeThree; nodefour.left = nodeFive; nodefour.right = nodeSix; one(nodeRoot); } static class BinaryTreeNode{ int var; BinaryTreeNode left; BinaryTreeNode right; } }