日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

[Java]将二叉树的左右子树交换 非递归实现

發布時間:2024/1/23 java 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [Java]将二叉树的左右子树交换 非递归实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
[java]?view plaincopy
  • package?dataStruct;??
  • ??
  • import?java.util.Stack;??
  • ??
  • /**?
  • ?*?將二叉樹的左右子樹交換?非遞歸實現?
  • ?*?@author?YangYi?
  • ?*/??
  • public?class?SwapTree?{??
  • ????private?static?Stack<Node>?stack?=?new?Stack<Node>();??
  • ??
  • ????public?static?void?main(String?args[])?{??
  • ????????Node?root?=?buildTree();??
  • ????????inOrderVisit(root);??
  • ????????swapTree(root);??
  • ????????System.out.println();??
  • ????????inOrderVisit(root);??
  • ????}??
  • ??
  • ????public?static?void?inOrderVisit(Node?root)?{??
  • ????????if?(root?==?null)??
  • ????????????return;??
  • ????????inOrderVisit(root.left);??
  • ????????System.out.print(root.data);??
  • ????????inOrderVisit(root.right);??
  • ????}??
  • ??
  • ????public?static?void?swapTree(Node?root)?{??
  • ????????if?(root?==?null)??
  • ????????????return;??
  • ??
  • ????????Node?temp?=?null;??
  • ??
  • ????????stack.push(root);??
  • ????????while?(!stack.isEmpty())?{??
  • ????????????Node?node?=?stack.peek();??
  • ??
  • ????????????if?(node.left?==?null?&&?node.right?==?null)?{??
  • ????????????????node.visited?=?true;??
  • ????????????????stack.pop();??
  • ????????????????continue;??
  • ????????????}??
  • ??
  • ????????????if?(node.left?!=?null)?{??
  • ????????????????if?(!node.left.visited)?{??
  • ????????????????????stack.push(node.left);??
  • ????????????????}??
  • ????????????}??
  • ??
  • ????????????if?((node.left?==?null?||?node.left.visited)?&&?node.right?!=?null)?{??
  • ????????????????if?(!node.right.visited)?{??
  • ????????????????????stack.push(node.right);??
  • ????????????????}??
  • ????????????}??
  • ??
  • ????????????if?((node.left?==?null?||?node.left.visited)??
  • ????????????????????&&?(node.right?==?null?||?node.right.visited))?{??
  • ????????????????temp?=?node.left;??
  • ????????????????node.left?=?node.right;??
  • ????????????????node.right?=?temp;??
  • ????????????????node.visited?=?true;??
  • ????????????????stack.pop();??
  • ????????????}??
  • ????????}??
  • ????}??
  • ??
  • ????public?static?Node?buildTree()?{??
  • ????????Node?root?=?new?Node();??
  • ????????root.data?=?1;??
  • ??
  • ????????Node?temp?=?new?Node();??
  • ????????temp.data?=?2;??
  • ????????root.left?=?temp;??
  • ??
  • ????????temp?=?new?Node();??
  • ????????temp.data?=?3;??
  • ????????root.right?=?temp;??
  • ??
  • ????????temp?=?new?Node();??
  • ????????temp.data?=?4;??
  • ????????root.right.right?=?temp;??
  • ??
  • ????????temp?=?new?Node();??
  • ????????temp.data?=?5;??
  • ????????root.left.right?=?temp;??
  • ??
  • ????????temp?=?new?Node();??
  • ????????temp.data?=?6;??
  • ????????root.left.right.right?=?temp;??
  • ??
  • ????????return?root;??
  • ????}??
  • }??
  • ??
  • class?Node?{??
  • ????boolean?visited?=?false;??
  • ????int?data?=?0;??
  • ????Node?left?=?null;??
  • ????Node?right?=?null;??
  • } ?
  • 總結

    以上是生活随笔為你收集整理的[Java]将二叉树的左右子树交换 非递归实现的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。